pandas
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。
简介
适用场合
- 与 SQL 或 Excel 表类似的,含异构列的表格数据;
- 有序和无序(非固定频率)的时间序列数据;
- 带行列标签的矩阵数据,包括同构或异构型数据;
- 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。
优势
- 处理浮点与非浮点数据里的缺失数据,表示为 NaN;
- 大小可变:插入或删除 DataFrame 等多维对象的列;
- 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;
- 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;
- 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;
- 基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;
- 直观地合并(merge)、连接(join) 数据集;
- 灵活地重塑(reshape)、透视(pivot)数据集;
- 轴支持结构化标签:一个刻度支持多个标签;
- 成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel 文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;
- 时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。
数据结构
维数 | 名称 | 描述 |
---|---|---|
1 | Series | 带标签的一维同构数组 |
2 | DataFrame | 带标签的,大小可变的,二维异构表格 |
指南
IO工具
Excel文件
读取excel文件
pd.read_excel('path_to_file.xls', sheet_name='Sheet1', index_col=None, na_values=['NA'])
- sheet_name参数允许指定单张表格或多张表格被读取。
- sheet_name的默认值是0,这表明读取的是第一张表格。
详细
pandas.read_excel(
io, #string类型文件的路径或url.
sheet_name=0, #指定的excel中的具体某个或某些表的表名或表索引.
header=0, #以哪些行作为表头,也叫做列名.
names=None, #自己定义一个表头(列名).
index_col=None, #将哪些列设为索引.
usecols=None, #指定读取excel中哪些列的数据,默认为None,表示读取全部.
squeeze=False, #默认为False,如果解析的数据只包含一列,则返回一个Series。
dtype=None, #接收dict,设置数据类型,具体到每列.
engine=None, #如果io不是缓冲区或路径,则必须将其设置为标识io。可接受的值是None、“xlrd”、“openpyxl”或“odf”.
converters=None, #类型为字典(dict).默认为None.进行值转换。{列名:str}
true_values=None, #默认:None,接收一个list,将在list中的值转换成True,只有在整列值都能转换成bool值时才能成功。
false_values=None, #默认:None,接收一个list,将在list中的值转换成False,只有在整列值都能转换成bool值时才能成功。
skiprows=None, #跳过excel中的某些行来读取数据.
nrows=None, #指定要读取excel表中哪些行的数据.
na_values=None, #设置指定值填充为NaN.
keep_default_na=True,
verbose=False, #布尔类型, 默认为 False.显示列表中除去数字列,NA值的数量.
parse_dates=False, #指定解析成日期格式的列.
date_parser=None, #funtion.指定解析日期格式的函数.
thousands=None, #将字符串列解析为数字的数千个分隔符。
comment=None, #将一个或多个字符传递给此参数以指示输入文件中的注释。
skipfooter=0, #省略指定行数的数据,从尾部数的行开始。
convert_float=True, #布尔, 默认为 True.将积分浮点数转换为int(即1.0 - > 1)。
mangle_dupe_cols=True, #布尔类型,默认为True.重复列将被指为“X”、“X.1”、“X.N”.
**kwds)
写入excel文件
df.to_excel('path_to_file.xlsx', sheet_name='Sheet1')
CSV文件
读取csv文件
pandas.read_csv(filepath_or_buffer, sep=<no_default>, header='infer', names=<no_default>, index_col=None, usecols=None, dtype=None)
- filepath_or_buffer :文件路径
- sep : str, 默认 read_csv() 分隔符为’,’ read_table() 方法,分隔符为 \t
- 当index_col=False ,pandas不再使用首列作为索引
- dtype : Type name or dict of column -> type, default None 指定某列或整体数据的数据类型.
写入csv文件
df.to_csv('')
索引
pandas对象时的返回类型值[]:
对象类型 | 选择 | 返回值类型 |
---|---|---|
系列 | series[label] | 标量值 |
数据帧 | frame[colname] | Series 对应于colname |
dataframe:
- 选择单列,产生 Series,与 df.A 等效:df[‘A’]
- 用 [ ] 切片行:df[0:3]
Series
In [38]: s1 = pd.Series(np.random.randn(6), index=list('abcdef'))
In [39]: s1
Out[39]:
a 1.431256
b 1.340309
c -1.170299
d -0.226169
e 0.410835
f 0.813850
dtype: float64
In [40]: s1.loc['c':]
Out[40]:
c -1.170299
d -0.226169
e 0.410835
f 0.813850
dtype: float64
In [41]: s1.loc['b']
Out[41]: 1.3403088497993827
DataFrame
In [44]: df1 = pd.DataFrame(np.random.randn(6, 4),
....: index=list('abcdef'),
....: columns=list('ABCD'))
....:
In [45]: df1
Out[45]:
A B C D
a 0.132003 -0.827317 -0.076467 -1.187678
b 1.130127 -1.436737 -1.413681 1.607920
c 1.024180 0.569605 0.875906 -2.211372
d 0.974466 -2.006747 -0.410001 -0.078638
e 0.545952 -1.219217 -1.226825 0.769804
f -1.281247 -0.727707 -0.121306 -0.097883
In [46]: df1.loc[['a', 'b', 'd'], :]
Out[46]:
A B C D
a 0.132003 -0.827317 -0.076467 -1.187678
b 1.130127 -1.436737 -1.413681 1.607920
d 0.974466 -2.006747 -0.410001 -0.078638
对象类型 | 索引 |
---|---|
系列 | s.loc[indexer] |
数据帧 | df.loc[row_indexer,column_indexer] |
选择
用单列的值选择数据:
In [39]: df[df.A > 0]
Out[39]:
A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
多层级索引和高级索引
Merge, join, and concatenate
结合(Concat)
concat() 用于连接 Pandas 对象:
In [73]: df = pd.DataFrame(np.random.randn(10, 4))
In [74]: df
Out[74]:
0 1 2 3
0 -0.548702 1.467327 -1.015962 -0.483075
1 1.637550 -1.217659 -0.291519 -1.745505
2 -0.263952 0.991460 -0.919069 0.266046
3 -0.709661 1.669052 1.037882 -1.705775
4 -0.919854 -0.042379 1.247642 -0.009920
5 0.290213 0.495767 0.362949 1.548106
6 -1.131345 -0.089329 0.337863 -0.945867
7 -0.932132 1.956030 0.017587 -0.016692
8 -0.575247 0.254161 -1.143704 0.215897
9 1.193555 -0.077118 -0.408530 -0.862495
# 分解为多组
In [75]: pieces = [df[:3], df[3:7], df[7:]]
In [76]: pd.concat(pieces)
Out[76]:
0 1 2 3
0 -0.548702 1.467327 -1.015962 -0.483075
1 1.637550 -1.217659 -0.291519 -1.745505
2 -0.263952 0.991460 -0.919069 0.266046
3 -0.709661 1.669052 1.037882 -1.705775
4 -0.919854 -0.042379 1.247642 -0.009920
5 0.290213 0.495767 0.362949 1.548106
6 -1.131345 -0.089329 0.337863 -0.945867
7 -0.932132 1.956030 0.017587 -0.016692
8 -0.575247 0.254161 -1.143704 0.215897
9 1.193555 -0.077118 -0.408530 -0.862495
连接(join)
SQL 风格的合并。
pd.merge(left, right, on='key')
追加(Append)
为 DataFrame 追加行。
df.append(s, ignore_index=True)
处理文本字符串
拆分和替换字符串
替换
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
拆分
In [15]: s2 = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'])
In [16]: s2.str.split('_')
Out[16]:
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
In [17]: s2.str.split('_').str.get(1)
Out[17]:
0 b
1 d
2 NaN
3 g
dtype: object
In [18]: s2.str.split('_').str[1]
Out[18]:
0 b
1 d
2 NaN
3 g
dtype: object
In [19]: s2.str.split('_', expand=True)
Out[19]:
0 1 2
0 a b c
1 c d e
2 NaN NaN NaN
3 f g h
拼接序列
In [64]: f = d.loc[[3, 2, 1, 0], :]
In [65]: s
Out[65]:
0 a
1 b
2 c
3 d
dtype: object
In [66]: f
Out[66]:
0 1
3 d d
2 NaN c
1 b b
0 a a
In [67]: s.str.cat(f, join='left', na_rep='-')
Out[67]:
0 aaa
1 bbb
2 c-c
3 ddd
dtype: object
可视化
绘图方法允许使用除默认线图以外的少数绘图样式。这些方法可以作为kind 关键字参数提供给plot() ,并包括:
'bar’或’barh’用于条形图
'hist’用于直方图
'box’的boxplot
'area’用于面积图
“scatter”的散点图
'pie’表示饼图
例如,可以通过以下方式创建条形图:
In [13]: plt.figure();
In [14]: df.iloc[5].plot(kind='bar');
Computational tools
Statistical functions
Correlation may be computed using the corr() method. Using the method parameter, several methods for computing correlations are provided:
求斯皮尔曼相关系数,例:
frame['a'].corr(frame['b'], method='spearman')
具体采用Statsmodels库