创建一个示例 DataFrame
我们创建一个示例 DataFrame,以便在后续的例子中使用。

import pandas as pd
import numpy as np
# 创建一个字典来构建 DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'年龄': [25, 30, 28, 35, 22],
'城市': ['北京', '上海', '广州', '深圳', '杭州'],
'薪资': [12000, 15000, 13500, 18000, 11000],
'入职日期': pd.to_datetime(['2025-01-01', '2025-05-15', '2025-03-10', '2025-11-20', '2025-07-01'])
}
df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)
输出:
原始 DataFrame:
姓名 年龄 城市 薪资 入职日期
0 张三 25 北京 12000 2025-01-01
1 李四 30 上海 15000 2025-05-15
2 王五 28 广州 13500 2025-03-10
3 赵六 35 深圳 18000 2025-11-20
4 钱七 22 杭州 11000 2025-07-01
选择列
选择列是 DataFrame 操作中最频繁的操作之一。
a) 选择单列
返回一个 Pandas Series。
# 使用方括号,列名作为字符串 name_series = df['姓名'] print(type(name_series)) # <class 'pandas.core.series.Series'> print(name_series)
输出:

0 张三
1 李四
2 王五
3 赵六
4 钱七
Name: 姓名, dtype: object
b) 选择多列
返回一个新的 DataFrame。
# 选择多列,将列名列表传入方括号 subset_df = df[['姓名', '年龄', '薪资']] print(type(subset_df)) # <class 'pandas.core.frame.DataFrame'> print(subset_df)
输出:
姓名 年龄 薪资
0 张三 25 12000
1 李四 30 15000
2 王五 28 13500
3 赵六 35 18000
4 钱七 22 11000
添加列
有多种方法可以添加新列。
a) 直接赋值
最简单直接的方法。
# 添加一个新列 '部门' df['部门'] = ['技术部', '市场部', '技术部', '销售部', '技术部'] print(df)
输出:
姓名 年龄 城市 薪资 入职日期 部门
0 张三 25 北京 12000 2025-01-01 技术部
1 李四 30 上海 15000 2025-05-15 市场部
2 王五 28 广州 13500 2025-03-10 技术部
3 赵六 35 深圳 18000 2025-11-20 销售部
4 钱七 22 杭州 11000 2025-07-01 技术部
b) 基于现有列计算
使用算术运算或函数。
# 添加一个计算列 '年薪' df['年薪'] = df['薪资'] * 12 print(df)
输出:
姓名 年龄 城市 薪资 入职日期 部门 年薪
0 张三 25 北京 12000 2025-01-01 技术部 144000
1 李四 30 上海 15000 2025-05-15 市场部 180000
2 王五 28 广州 13500 2025-03-10 技术部 162000
3 赵六 35 深圳 18000 2025-11-20 销售部 216000
4 钱七 22 杭州 11000 2025-07-01 技术部 132000
c) 使用 assign() 方法
assign() 方法返回一个新的 DataFrame,不会修改原始的 df,这在链式操作中非常有用。
# 添加一个 '是否高薪' 列,薪资高于15000为 True df_new = df.assign(是否高薪=df['薪资'] > 15000) print(df_new)
输出:
姓名 年龄 城市 薪资 入职日期 部门 年薪 是否高薪
0 张三 25 北京 12000 2025-01-01 技术部 144000 False
1 李四 30 上海 15000 2025-05-15 市场部 180000 False
2 王五 28 广州 13500 2025-03-10 技术部 162000 False
3 赵六 35 深圳 18000 2025-11-20 销售部 216000 True
4 钱七 22 杭州 11000 2025-07-01 技术部 132000 False
删除列
a) 使用 drop() 方法 (推荐)
这是最常用和最安全的方法。
axis=1表示在列上操作。inplace=True表示在原 DataFrame 上直接修改,不返回新对象。inplace=False(默认) 返回一个删除列后的新 DataFrame,原df不变。
# 创建一个副本用于演示
df_copy = df.copy()
# 方法1: 返回新 DataFrame,原 df_copy 不变
df_dropped = df_copy.drop('部门', axis=1)
print("删除 '部门' 列后的新 DataFrame:")
print(df_dropped)
print("\n原始的 df_copy 并未改变:")
print(df_copy)
# 方法2: 直接在原 DataFrame 上修改
df_copy.drop('入职日期', axis=1, inplace=True)
print("\n使用 inplace=True 后,df_copy 被修改:")
print(df_copy)
b) 使用 del 关键字
直接从命名空间中删除列,会永久修改原 DataFrame。
# 再次创建一个副本
df_copy2 = df.copy()
print("删除前的 df_copy2:")
print(df_copy2)
del df_copy2['年龄']
print("\n使用 del 删除 '年龄' 列后的 df_copy2:")
print(df_copy2)
重命名列
使用 rename() 方法,非常灵活。
- 使用字典
{'旧列名': '新列名'}来指定重命名。 axis=1或columns参数指定是列重命名。
# 重命名单个或多个列
df_renamed = df.rename(columns={
'姓名': '员工姓名',
'薪资': '月薪'
})
print("重命名后的 DataFrame:")
print(df_renamed)
输出:
重命名后的 DataFrame:
员工姓名 年龄 城市 月薪 入职日期 部门 年薪
0 张三 25 北京 12000 2025-01-01 技术部 144000
1 李四 30 上海 15000 2025-05-15 市场部 180000
2 王五 28 广州 13500 2025-03-10 技术部 162000
3 赵六 35 深圳 18000 2025-11-20 销售部 216000
4 钱七 22 杭州 11000 2025-07-01 技术部 132000
修改列的数据类型
使用 astype() 方法。
# 将 '年龄' 列从 int64 转为 float64 df['年龄'] = df['年龄'].astype(float) print(df.dtypes)
输出:
姓名 object
年龄 float64
城市 object
薪资 int64
入职日期 datetime64[ns]
部门 object
年薪 int64
dtype: object
列的常用操作
a) 查看列名
print(df.columns) # Index(['姓名', '年龄', '城市', '薪资', '入职日期', '部门', '年薪'], dtype='object')
b) 检查列是否存在
if '城市' in df.columns:
print("列 '城市' 存在")
c) 获取列的统计信息
print(df['薪资'].describe())
输出:
count 5.000000
mean 13900.000000
std 2857.738033
min 11000.000000
25% 12000.000000
50% 13500.000000
75% 15000.000000
max 18000.000000
Name: 薪资, dtype: float64
d) 对列进行排序
ascending=True(默认) 为升序。ascending=False为降序。
# 按 '薪资' 降序排列 df_sorted = df.sort_values(by='薪资', ascending=False) print(df_sorted)
输出:
姓名 年龄 城市 薪资 入职日期 部门 年薪
3 赵六 35 深圳 18000 2025-11-20 销售部 216000
1 李四 30 上海 15000 2025-05-15 市场部 180000
2 王五 28 广州 13500 2025-03-10 技术部 162000
0 张三 25 北京 12000 2025-01-01 技术部 144000
4 钱七 22 杭州 11000 2025-07-01 技术部 132000
| 操作 | 方法/代码 | 说明 |
|---|---|---|
| 选择单列 | df['列名'] |
返回一个 Series |
| 选择多列 | df[['列名1', '列名2']] |
返回一个新的 DataFrame |
| 添加列 | df['新列名'] = 值 |
直接赋值,原地修改 |
| 添加列 | df.assign(新列名=计算) |
返回新 DataFrame,适合链式操作 |
| 删除列 | df.drop('列名', axis=1) |
返回新 DataFrame (默认) |
| 删除列 | df.drop('列名', axis=1, inplace=True) |
原地修改 |
| 删除列 | del df['列名'] |
原地修改,直接删除 |
| 重命名列 | df.rename(columns={'旧名':'新名'}) |
返回新 DataFrame |
| 修改类型 | df['列名'].astype(新类型) |
如 int, float, str |
| 查看列名 | df.columns |
返回一个 Index 对象 |
| 排序 | df.sort_values(by='列名') |
按 '列名' 的值对行进行排序 |
熟练掌握这些列操作,是高效使用 Pandas 进行数据分析的关键一步。
