Home Pandas知识点
Post
Cancel

Pandas知识点

前言

每天起床刷一刷

显示前三行

Pandas常用取子集方法总结表

方法作用示例备注
df.head()取前5行df.head()默认前5行,可以指定数量,如 df.head(10)
df.tail()取最后5行df.tail(3)取最后3行
df.sample(n)随机抽取n行df.sample(2)乱序抽取,默认不放回,可设置 replace=True
df.iloc[i]按位置取第i行df.iloc[0]第0行,注意是位置,不是标签
df.iloc[i:j]按位置取i到j-1行df.iloc[1:4]类似 Python 切片,左闭右开
df.loc[label]按索引标签取行df.loc[2]如果 DataFrame 索引是自定义的名字,用 .loc[]
df[:n]快速取前n行(切片)df[:5]不推荐,容易出错,还是用 .head()更稳
df.query('条件')根据条件筛选行df.query('age > 30')适合写复杂条件,且更简洁
df[df['列名'] > 值]按列取子集(布尔索引)df[df['age'] > 30]最常用的条件过滤方式

表格四则运算

运算符号Python常规用法Pandas中推荐用法说明
加法+a + bdf['col'].add(x)逐元素相加
减法-a - bdf['col'].sub(x)逐元素相减
乘法*a * bdf['col'].mul(x)df['col'].multiply(x)逐元素相乘
除法/a / bdf['col'].div(x)df['col'].divide(x)逐元素相除

创建新列

  1. 直接赋值
    1
    
    df['new_col'] = df['old_col'] * 2
    
  2. 赋固定值
    1
    2
    
    df['status'] = 'active'
    df['flag'] = 1
    
  3. 根据多列计算生成
    1
    2
    
    df['ratio'] = df['col1'] / df['col2']
    df['full_name'] = df['first'] + ' ' + df['last']
    
  4. 通过 apply() 添加复杂逻辑列 ```bash df[‘category’] = df[‘score’].apply(lambda x: ‘pass’ if x > 60 else ‘fail’)
1
2
3
4
5
5. 使用 assign()(链式调用)
```bash
df = df.assign(bonus=lambda x: x['salary'] * 2)

创建新行

  1. 使用 loc[] / iloc[] 手动添加一行(指定索引) ```bash df.loc[len(df)] = [‘Tom’, 25000]
1
2
3
4
5
2. 使用 append() 添加单行或多行(已弃用,改用 concat)
```bash
new_row = pd.DataFrame([{'name': 'Tom', 'salary': 25000}])
df = pd.concat([df, new_row], ignore_index=True)

  1. 创建 DataFrame 时直接包含所有行 ```bash df = pd.DataFrame([ {‘name’: ‘Alice’, ‘salary’: 5000}, {‘name’: ‘Bob’, ‘salary’: 6000} ])
1
2
3
4
5
6
7
# 拼接
## pd.concat
```python
# 垂直拼接(axis=0 是默认值,表示按行拼接)
df = pd.concat([df1, df2], axis=0)
# 如果不关心原来的索引,可以重设:
df_reset = pd.concat([df1, df2], ignore_index=True)

不同列拼接

1
2
3
4
5
6
7
8
df3 = pd.DataFrame({'A': [5], 'C': ['x']})

# 并集拼接
out = pd.concat([df1, df3], ignore_index=True)

# 只保留 'A' 列
out_inner = pd.concat([df1, df3], ignore_index=True, join='inner')

分组内拼接

如果需要先分组再拼接,比如对多个子 DataFrame 结果汇总,groupby + apply 常与 concat 配合使用:

1
2
3
# 假设有多个分组处理后的 df_i,需要把它们“竖”着拼回一个总表
dfs = [proc(df) for df in [df1, df2, df3]]
result = pd.concat(dfs, ignore_index=True)

获取行列数

pandas.DataFrame

显示行数,列数等:df.info() 获取行数:len(df) 获取列数:len(df.columns) 获取行数和列数:df.shape 获取元素总数(大小):df.size 指定index时的注意事项

pandas.Series

获取元素总数(大小):len(s),s.size

This post is licensed under CC BY 4.0 by the author.