Pandas 初体验
pandas 主要提供了 Series
以及 DataFrame
两个数据结构来分别处理 1D
以及 2D
数据. DataFrame
的每一列都是一个 Series
. 下面介绍一些 pandas 的常用方法. 库的导入遵循惯例:
import pandas as pd
数据读取
df = pd.read_table(filepath, sep='\t', header=None)
从文件 filepath
读入表格, 具体参数详见 pandas.read_table 文档.
sep
: 设置分隔符header
:header
不设置为None
的话, 默认会对columns
进行推断, 建议使用None
.
DataFrame
传入字典:
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 结果
A B C
0 1 4 7
1 2 5 8
2 3 6 9
DataFrame
传入 list
:
# 注意和传入 dict 的区别
df = pd.DataFrame([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# 结果
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
数据访问
先假设表格为:
df =
A B C
R0 1 4 7
R1 2 5 8
R1 3 6 9 # 注意这里故意设置行 label 为 R1, 和上一行一样
访问行列数据有以下方法:
获取行数据
df.loc[row] # 访问 label 为 row 的行
df.loc[row, : ] # 获取 label 为 row 的行数据
df.iloc[idx] # 访问第 idx 行 (idx 为 0 ~ N 之间的整数)
df[startrow:endrow] # 获取 DataFrame 的特定范围内的行, startrow 和 endrow 为 index (整数)
获取列数据
df[col] # 访问 label 为 col 的列
df[[col1, col2, ...]] # 获取指定列的数据
获取特定区域范围内的数据
# startrow 等均为 label
df.loc[startrow:endrow, startcolumn:endcolumn]
获取某个 cell 的数据
df.loc[row, col] # row 和 col 均为 label
df.loc[row][col] # row 和 col 均为 label
转换为 Numpy 数组
pandas 的版本会有要求, 具体见文档. 如果无法使用如下 API, 可能用 pip
对 pandas 升级:
pip install --upgrade -I pandas # -I 表示 --ignore-installed
Series
和 DataFrame
都存在 to_numpy()
方法.
df[col].to_numpy() # 将 col 这一列转换为 Numpy 数组
属性访问
df.shape # 输出表格大小
df.index = ['1', '2', ...] # 修改行标签
df.columns = ['A', 'B', ...] # 修改列标签
表格描述
df.describe() # 数据的统计信息, 比如每列数据的个数, 平均值, 标准差等.
df.head(5) # 展示前 5 行
df.tail(5) # 展示后 5 行