pandas简单介绍和本系列说明
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool,built on top of the Python programming language.
进入官网可以看到现在最新的版本是1.0.3,之后代码也就使用1.0.3的pd咯。此系列主要参考Pandas官方文档和由Datawhale主办的一期Joyful-Pandas,结合自己使用pandas的一些体会进行扩展,最后还有个人对问题和练习的解答。使用到的数据集可以在此下载。
#从清华镜像拉装1.0.3版本的Pandas
!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas==1.0.3
import pandas as pd
#查看Pandas版本
pd.__version__
'1.0.3'
一般使用python安装库,会用到pip install libName。这会在Python的官方源pypi.python.org/pypi 下载,有时会因为超时会抛异常无法下载成功。所以可以选择一些比较稳定速度比较快的国内镜像来下载python库。
这里选择用清华的镜像是因为大多数时候直接pip install 一个库
会比较慢,国内常用阿里、豆瓣、中科大的镜像网址如下,可以自行选择替换。
https://mirrors.aliyun.com/pypi/simple/
https://pypi.douban.com/simple
https://mirrors.ustc.edu.cn/pypi/web/simple
一、csv、txt、xls或xlsx文件读取与写入
1. 读取与写入csv格式
#读取
df = pd.read_csv('work/table.csv')
df.head()#默认查看前五行,想看n行的话就在括号内加数字,如前20行 df.head(20)
#写入
df.to_csv('data/new_table.csv')
#df.to_csv('data/new_table.csv', index=False) #保存时除去行索引
#df.to_csv('data/new_table.csv', header=False) #保存时除去列索引
2. 读取与写入txt格式
#读取
df_txt = pd.read_table('work/table.txt') #可设置sep分隔符参数
#df_txt = pd.read_table('work/table.txt',sep='\t') #其实上行代码就是默认分隔符为\t,即空四个字符
df_txt
#写入
df_txt.to_csv('data/new_table.txt', index=False)
打开写入的‘new_table.txt’,就会发现格式和之前不太一样,使用‘,’分隔。因此读取时可以使用df_txt = pd.read_table('data/new_table.txt',sep=',')
。如果要保持一致,也就是分隔符为\t,那么可以使df_txt.to_csv('data/new_table.txt', index=False,sep='\t')
。
3. 读取与写入xls或xlsx格式
#读取
!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd
import xlrd
#需要安装xlrd包
df_excel = pd.read_excel('work/table.xlsx')
df_excel.head()
#写入
!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl
import openpyxl
#需要安装openpyxl
df.to_excel('data/new_table2.xlsx', sheet_name='Sheet1')
打开写入的‘new_table2.xlsx’,就会发现格式和之前不太一样,因为没有删除行索引。如果要保持一致,那么可以使df.to_excel('data/new_table.xlsx', sheet_name='Sheet1', index=False)
,就可以得到“无添加”。
二、基本数据结构
在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame。Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其可通过索引标签的方式获取数据,还具有索引的自动对齐功能;DataFrame类似于numpy中的二维数组,同样可以通用numpy数组的函数和方法,而且还具有其他灵活应用。
1. Series
对于一个Series,其中最常用的属性为值(values),索引(index),名字(name),类型(dtype)。访问Series属性就直接一个点+属性名。Series有相当多的方法可以调用,也是就直接一个点+调用方法。下面上代码:
Series创建
#创建一个Series,这里是随机的,故得到的结果每次也不一样
s = pd.Series(np.random.randn(5),index=['a','b','c','d','e'],name='这是一个Series',dtype='float64')
s
a -1.871256
b -1.048312
c -1.068401
d 0.168282
e -1.606225
Name: 这是一个Series, dtype: float64
访问Series属性
#访问Series属性
s.values
s.name
s.index
s.dtype
#取Series中某一索引的值
s['a']
Series调用方法
#Series有相当多的方法可以调用,使用方式和属性一样,直接一个点+调用方法
print([attr for attr in dir(s) if not attr.startswith('_')])
print(s.mean())
['T', 'a', 'abs', 'add', 'add_prefix', 'add_suffix', 'agg', 'aggregate', 'align', 'all', 'any', 'append', 'apply', 'argmax', 'argmin', 'argsort', 'array', 'asfreq', 'asof', 'astype', 'at', 'at_time', 'attrs', 'autocorr', 'axes', 'b', 'between', 'between_time', 'bfill', 'bool', 'c', 'clip', 'combine', 'combine_first', 'convert_dtypes', 'copy', 'corr', 'count', 'cov', 'cummax', 'cummin', 'cumprod', 'cumsum', 'd', 'describe', 'diff', 'div', 'divide', 'divmod', 'dot', 'drop', 'drop_duplicates', 'droplevel', 'dropna', 'dtype', 'dtypes', 'duplicated', 'e', 'empty', 'eq', 'equals', 'ewm', 'expanding', 'explode', 'factorize', 'ffill', 'fillna', 'filter', 'first', 'first_valid_index', 'floordiv', 'ge', 'get', 'groupby', 'gt', 'hasnans', 'head', 'hist', 'iat', 'idxmax', 'idxmin', 'iloc', 'index', 'infer_objects', 'interpolate', 'is_monotonic', 'is_monotonic_decreasing', 'is_monotonic_increasing', 'is_unique', 'isin', 'isna', 'isnull', 'item', 'items', 'iteritems', 'keys', 'kurt', 'kurtosis', 'last', 'last_valid_index', 'le', 'loc', 'lt', 'mad', 'map', 'mask', 'max', 'mean', 'median', 'memory_usage', 'min', 'mod', 'mode', 'mul', 'multiply', 'name', 'nbytes', 'ndim', 'ne', 'nlargest', 'notna', 'notnull', 'nsmallest', 'nunique', 'pct_change', 'pipe', 'plot', 'pop', 'pow', 'prod', 'product', 'quantile', 'radd', 'rank', 'ravel', 'rdiv', 'rdivmod', 'reindex', 'reindex_like', 'rename', 'rename_axis', 'reorder_levels', 'repeat', 'replace', 'resample', 'reset_index', 'rfloordiv', 'rmod', 'rmul', 'rolling', 'round', 'rpow', 'rsub', 'rtruediv', 'sample', 'searchsorted', 'sem', 'set_axis', 'shape', 'shift', 'size', 'skew', 'slice_shift', 'sort_index', 'sort_values', 'squeeze', 'std', 'sub', 'subtract', 'sum', 'swapaxes', 'swaplevel', 'tail', 'take', 'to_clipboard', 'to_csv', 'to_dict', 'to_excel', 'to_frame', 'to_hdf', 'to_json', 'to_latex', 'to_list', 'to_markdown', 'to_numpy', 'to_period', 'to_pickle', 'to_sql', 'to_string', 'to_timestamp', 'to_xarray', 'transform', 'transpose', 'truediv', 'truncate', 'tshift', 'tz_convert', 'tz_localize', 'unique', 'unstack', 'update', 'value_counts', 'values', 'var', 'view', 'where', 'xs']
-1.0851822894643066
2. DataFrame
数据框DataFrame更为复杂,使用方法也更多了。
DataFrame创建
#创建一个DataFrame
df = pd.DataFrame({
'col1':list('abcde'),'col2':range(5,10),'col3':[1.3,2.5,3.6,4.6