Post

Pandas 使用

Pandas 使用

介绍

参考资料:


使用

创建 Dataframe / Series

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd

pd.__version__   # 查看 pandas 版本

# 二维数据结构
df = pd.DataFrame(...)

# 一维数据结构
ser = pd.Series(...)

# value 为标量的 dict 数据,变换成 DataFrame 方式
data = {"a": 1, "b": 2, "c": 3}

df = pd.DataFrame([data])
df = pd.DataFrame(data, index=[0])
df = pd.DataFrame(data, index=[0, 1, 2])
# 将 多个 dict 数据存储成 list,再变换成 DataFrame(效率较高)
df = pd.DataFrame([data, data])

print(df)

快速查看数据信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
df.info()
df.describe()
df.head()
df.tail()

df.count()


df.dtypes
df.shape
df.size
df.index
df.columns
df.values
df.ndim

# Series 属性
ser.is_unique


df.corr()  # Pearson 相关系数矩阵

索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Series 索引
ser[1]      # 整数索引
ser["a"]    # 标签索引


df.loc[]     # 基于标签索引;闭区间
df.iloc[]    # 基于整数位置索引;半开区间

# 选择单列
df["col1"]
df.col1
df.loc[:, "col1"]
df.iloc[:, 0]

# 选择多列
df[["col1", "col2"]]
df.loc[:, ["col1", "col2"]]
df.iloc[:, [2:5]]

# 选择行
df.loc[1:3]  # 行标签索引默认是整数 0 - N-1,此时写法和 iloc 类似
df.loc[["a", "b", "c"]]
df.iloc[1:3]

# 选择行和列
df.loc[1:3, ["col1", "col2"]]
df.loc[["a", "b", "c"], ["col1", "col2"]]
df.iloc[1:3, 2:4]

筛选

1
2
3
4
5
6
7
8
9
# 类别数据
df[df["col1"] == "class1"]
df[~df["col1"] == "class1"]
df[df["col1"].isin(["class1", "class2"])]

# 数值数据
df[df["col1"] > 0]
# 多个条件,每个条件需用 () 包起来
df[(df["col1"] > 0) & (df["col1"] < 1.0)]

统计

1
2
3
4
df.sum()
df.max()
df.min()
df.mean()

数据文件读取与保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pd.read_csv()

# 参数
sep                 # 分隔符,默认是",";多个空格,可以使用 "\s+"
comment             # 忽略注释行;如 "#" 开头的
header              # 表头;可以为 None;默认用第一行的内容作为表头
skiprows            # 跳过 N 行
index_col           # 用作行索引(标签)的列
usecols             # 需要加载的列,可以使用序号或者列名


pd.read_excel()

# 参数
sheet_name          # 指定数据表的名称
# header skiprows 等参数同上
# 无 sep 参数

df.to_csv()

数据分组

groupby:对数据进行分组处理

1
2
3
df.groupby("col1").mean()
df.groupby("col1").max()
df.groupby("col1").min()

map()、apply() 函数

lambda 匿名函数:主要用在 map()apply() 函数中

map():主要用于对 Series 中的每个元素应用一个函数或映射关系,常用于数据替换;映射中缺少与 Series 中的值相对应的键,则结果中相应的元素会被设置为 NaN apply():可用于 DataFrame 和 Series

pandas apply 用法:(数据科学学习手札69)详解pandas中的map、apply、applymap、groupby、agg - 费弗里 - 博客园

1
2
3
# 两者等价
df[df["col1"] > 0]
df[df["col1"].apply(lambda x: x > 0)]

其他

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 列按照特定顺序进行排列
df["solute_site"] = pd.Categorical(
    df["solute_site"],
    categories=solute_site_list,
    ordered=True,
)
df["solute"] = pd.Categorical(
    df["solute"],
    categories=solute_list,
    ordered=True,
)

df.sort_values(
    by=["col1", "col2"],
    ignore_index=True,
    inplace=True,
)
1
2
3
4
5
6
7
8
9
# index 重置
# inplace=True 操作直接在 df 上执行,而非返回新的 DataFrame 对象
df.reset_index(inplace=True)

# 行拼接,忽略索引
pd.concat([df1, df2], axis=0, ignore_index=True)

# 按照 列/行 排序,忽略索引
df.sort_values(by=..., ignore_index=True)
1
2
3
4
5
6
7
8
9
10
11
12
13
# 将数据转化成一维
df.values.reshape(-1)

# 当 df 既有数值和字符串数据时,也可以使用
df.round()

df.diff()

df.unique()
df.nunique()

df.nlargest()   # 查看排前 N 的数据
df.nsmallest()  # 查看排后 N 的数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
df.drop()

# 统计该列出现的不同值及对应数目
df.value_counts(sort=False)

# 绘图
df.plot(kind="bar")

df.duplicated()
df.drop_duplicates(, keep=..., inplace=...)
keep                # first last

# 缺失值处理
isnull()
isna()
dropna()
fillna(value=0)
This post is licensed under CC BY 4.0 by the author.