Pandas库¶
约 563 个字 91 行代码 预计阅读时间 4 分钟
Series:带标签的一维数组¶
Series 类似于 NumPy 的一维数组,但有索引(标签)。
DataFrame¶
DataFrame 是 Pandas 最核心的数据结构,可以类比为一个带行列标签的二维表格(就像 Excel 表)。你可以把它想成是多个 Series 按列组合而成。
Python
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'Score': [85.5, 90.0, 95.5]
}
df = pd.DataFrame(data)
print(df)
你可以像字典一样取列:
也可以按行索引:
Python
print(df.loc[1]) # 按标签索引第 1 行
"""
name Bob
age 30
Score 90.0
Name: 1, dtype: object
"""
print(df.iloc[2]) # 按位置索引第 2 行
Info
loc 用名字(像字典)
iloc 用数字(像数组)
loc[a:b] 会包含 b,iloc[a:b] 不会包含 b
提示
-loc
用名字(像字典)
-iloc
用数字(像数组)
-loc[a:b]
包含b
,iloc[a:b]
不包含b
Python
import pandas as pd
data = {
'Name': ['Tom', 'Lily', 'Jack'],
'Math': [88, 95, 70],
'English': [78, 85, 90]
}
df = pd.DataFrame(data, index=['s1', 's2', 's3'])
# 访问标签范围(包括末尾)
print(df.loc['s1':'s2'])
# 访问第 0~1 行(不含第 2 行)
print(df.iloc[0:2])
属性 / 方法 | 作用 |
---|---|
.shape | 返回形状(行数,列数) |
.columns | 返回所有列名(Index 对象) |
.index | 返回所有行索引 |
.dtypes | 返回每一列的数据类型 |
.head(n) | 查看前 n 行数据(默认前 5 行) |
.tail(n) | 查看后 n 行数据 |
.info() | 查看总体结构(非空数、类型、内存) |
.describe() | 数值列的汇总统计(均值、标准差、最大最小) |
按条件筛选DataFrame的行¶
Python
import pandas as pd
data = {
'Name': ['Tom', 'Lily', 'Jack', 'Lucy', 'Eric'],
'Math': [88, 95, 70, 82, 91],
'English': [78, 85, 90, 88, 76],
'Age': [20, 22, 21, 23, 21],
'Gender': ['M', 'F', 'M', 'F', 'M']
}
df = pd.DataFrame(data)
我们要筛选Math 成绩大于 80 且 Age 小于 23 的学生:
Python
# 筛选 Math > 80 且 Age < 23
filtered_df = df[(df['Math'] > 80) & (df['Age'] < 23)]
print(filtered_df)
注意:
-
条件之间要用 &(与)和 |(或)连接。
-
每个条件要用圆括号括起来。
-
比较时,可以使用常见的运算符:==, !=, <, >, <=, >=。
选择特定列,添加,删除列¶
Text Only
- 单列选择:df['column_name']
- 多列选择:df[['col1', 'col2']]
- 添加列:df['new_column'] = value
- 删除列,返回副本:df.drop('column_name', axis=1)
- 删除列,在原始数据上修改:df.drop('column_name', axis=1,inplace=True)
DataFrame 的排序(按值或按索引排序)¶
方法名 | 作用说明 |
---|---|
sort_values() | 按列的值排序(最常用) |
sort_index() | 按行或列的索引排序 |
Python
import pandas as pd
data = {
'Name': ['Tom', 'Lily', 'Jack', 'Lucy', 'Eric'],
'Math': [88, 95, 70, 82, 91],
'English': [78, 85, 90, 88, 76],
'Age': [20, 22, 21, 23, 21]
}
df = pd.DataFrame(data)
按列值排序(sort_values
)
单列排序¶
多列排序¶
Python
# 先按 Age 升序,再按 English 降序
# 如果同 Age 才按照 English 降序
df.sort_values(by=['Age', 'English'], ascending=[True, False])
按索引排序(sort_index
)
按行索引排序¶
按列名排序(横向)¶
缺省值处理¶
- isna() / isnull():检查缺失值
- dropna():删除含 NaN 的行或列
- fillna():填充缺失值(0、前值、后值、特定值等)
- dropna(thresh=...):根据非 NaN 值的个数删除行或列
- fillna(method='ffill'/'bfill'):前后值填充
- 按列使用不同的填充值:
df_filled_col = df.fillna({'Math': 80, 'English': 85})
分组操作¶
方法名 | 作用说明 |
---|---|
groupby() | 将数据按某些列进行分组 |
agg() | 聚合操作,可以对每个组应用多个聚合函数 |
sum() | 按组求和 |
mean() | 按组计算均值 |
count() | 按组计算非 NaN 值的个数 |
transform() | 对每个组进行变换,返回与原数据结构相同的 DataFrame |