杰瑞科技汇

Python如何快速生成DataFrame?

首先导入 Pandas

在使用 Pandas 之前,请确保你已经安装了它,并在代码中导入它。

Python如何快速生成DataFrame?-图1
(图片来源网络,侵删)
# 如果尚未安装,请先运行: pip install pandas
import pandas as pd
import numpy as np # 有时会用到 numpy 生成随机数据

从字典 创建 DataFrame

这是最常用、最直观的方法之一,字典的键(key)将成为 DataFrame 的列名,字典的值(value)是包含该列数据的列表。

特点:

  • 列名由字典的键决定。
  • 列的顺序通常与字典键的插入顺序一致(Python 3.7+ 保证)。
  • 每个列表的长度(即数据条数)必须相同。

示例 1:基本用法

# 1. 准备数据:字典
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 28, 35],
    '城市': ['北京', '上海', '广州', '深圳']
}
# 2. 创建 DataFrame
df = pd.DataFrame(data)
# 3. 查看结果
print(df)

输出:

   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州
3  赵六  35  深圳

从列表的列表 创建 DataFrame

如果你已经有了一个二维列表(每个子列表代表一行数据),可以直接用它来创建 DataFrame。

Python如何快速生成DataFrame?-图2
(图片来源网络,侵删)

特点:

  • 列名默认为整数索引(0, 1, 2, ...)。
  • 通常需要手动指定 columns 参数来设置列名。

示例 2:基本用法

# 1. 准备数据:列表的列表
data_list = [
    ['张三', 25, '北京'],
    ['李四', 30, '上海'],
    ['王五', 28, '广州'],
    ['赵六', 35, '深圳']
]
# 2. 创建 DataFrame,并指定列名
df = pd.DataFrame(data_list, columns=['姓名', '年龄', '城市'])
# 3. 查看结果
print(df)

输出:

   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州
3  赵六  35  深圳

从 NumPy 数组 创建 DataFrame

当你的数据是数值型时,从 NumPy 数组创建 DataFrame 非常高效。

示例 3:从随机数组创建

# 1. 准备数据:一个 3x4 的随机数组
data_array = np.random.rand(3, 4)
# 2. 创建 DataFrame,并指定列名和索引
df = pd.DataFrame(
    data_array,
    columns=['A', 'B', 'C', 'D'],
    index=['行1', '行2', '行3']
)
# 3. 查看结果
print(df)

输出:

Python如何快速生成DataFrame?-图3
(图片来源网络,侵删)
          A         B         C         D
行1  0.123456  0.789012  0.345678  0.901234
行2  0.567890  0.234567  0.678901  0.456789
行3  0.789012  0.345678  0.901234  0.123456

从列表的字典 创建 DataFrame

这是另一种非常常见的结构,尤其是在处理 JSON 数据时,列表中的每个字典代表一行数据。

特点:

  • 字典的键会成为列名。
  • 如果某一行缺少某个键,对应的值会自动填充为 NaN(Not a Number,表示缺失值)。

示例 4:处理缺失值

# 1. 准备数据:列表的字典
data_list_of_dicts = [
    {'姓名': '张三', '年龄': 25, '城市': '北京'},
    {'姓名': '李四', '年龄': 30, '城市': '上海'},
    {'姓名': '王五', '城市': '广州'}, # 缺少 '年龄' 键
    {'年龄': 35, '城市': '深圳', '职业': '工程师'} # 增加了 '职业' 键
]
# 2. 创建 DataFrame
df = pd.DataFrame(data_list_of_dicts)
# 3. 查看结果
print(df)

输出:

   姓名    年龄  城市    职业
0  张三  25.0  北京   NaN
1  李四  30.0  上海   NaN
2  王五   NaN  广州   NaN
3  NaN  35.0  深圳  工程师

从输出可以看到,Pandas 自动处理了缺失值和新增的列。


从 CSV 或 Excel 文件 读取

虽然这不完全是“生成”,但在实际工作中,我们经常需要从外部文件加载数据到 DataFrame 中,这是最常见的数据来源。

示例 5:从 CSV 文件读取

假设你有一个名为 data.csv 的文件,内容如下:

姓名,年龄,城市
张三,25,北京
李四,30,上海
王五,28,广州
# 1. 从 CSV 文件读取数据到 DataFrame
df = pd.read_csv('data.csv')
# 2. 查看结果
print(df)

输出:

   姓名  年龄  城市
0  张三  25  北京
1  李四  30  上海
2  王五  28  广州

创建一个空的 DataFrame

有时,你可能需要先创建一个空的 DataFrame,然后在循环或条件判断中逐行或逐列地添加数据。

示例 6:创建空 DataFrame 并添加数据

# 1. 创建一个只有列名的空 DataFrame
df_empty = pd.DataFrame(columns=['姓名', '年龄', '城市'])
# 2. 查看初始状态
print("初始空 DataFrame:")
print(df_empty)
print("-" * 20)
# 3. 准备要添加的新数据行
new_row1 = {'姓名': '钱七', '年龄': 40, '城市': '杭州'}
new_row2 = {'姓名': '孙八', '年龄': 22, '城市': '成都'}
# 4. 使用 append 方法添加行 (注意:append 方法在较新版本中已弃用)
# 推荐使用 pd.concat
df = pd.concat([df_empty, pd.DataFrame([new_row1])], ignore_index=True)
df = pd.concat([df, pd.DataFrame([new_row2])], ignore_index=True)
# 5. 查看最终结果
print("添加数据后的 DataFrame:")
print(df)

输出:

初始空 DataFrame:
Empty DataFrame
Columns: [姓名, 年龄, 城市]
Index: []
--------------------
添加数据后的 DataFrame:
   姓名  年龄  城市
0  钱七  40  杭州
1  孙八  22  成都

注意df.append() 方法虽然简单,但在循环中大量使用会导致性能问题,推荐使用 pd.concat(),如上例所示。


总结与选择建议

方法 适用场景 特点
从字典 已知列名和数据列表,结构清晰。 最常用,列名直观。
从列表的列表 数据已经是二维列表形式。 需要手动指定列名。
从 NumPy 数组 处理纯数值型、大规模数据。 高效,常用于科学计算。
从列表的字典 数据结构类似 JSON,每行是一个对象。 能灵活处理缺失值和新列。
从文件读取 分析真实世界的数据(CSV, Excel等)。 实际工作中的主要数据来源
创建空 DataFrame 动态、逐步构建 DataFrame。 需要后续填充数据。

对于初学者和大多数日常任务,从字典创建 是最需要掌握的方法,当你开始处理更复杂的数据源时,从列表的字典创建从文件读取 会变得非常重要。

分享:
扫描分享到社交APP
上一篇
下一篇