在 Python 中,最常用和最强大的库来创建 DataFrame 的是 Pandas,下面我将为你详细介绍如何使用 Pandas 从不同来源创建 DataFrame,并包含丰富的示例。

准备工作:安装 Pandas
如果你的环境中还没有安装 Pandas,请先打开终端或命令行工具,运行以下命令:
pip install pandas
安装完成后,在你的 Python 脚本中导入它:
import pandas as pd # 导入numpy,因为它经常和pandas一起使用,尤其是在创建示例数据时 import numpy as np
约定俗成:我们通常使用
pd作为pandas的别名,这样代码会更简洁。
从字典 创建 DataFrame
这是最常见和直观的方式之一,字典的键会成为 DataFrame 的列名,字典的值(通常是列表或数组)会成为对应列的数据。

基本语法:
pd.DataFrame(data, columns=..., index=...)
data: 包含数据的字典。columns: (可选) 指定列名的列表,可以用来重新排序或筛选列。index: (可选) 指定行索引的列表。
示例 2.1: 最简单的字典创建
# 1. 准备数据:字典的值是列表
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 28, 35],
'城市': ['北京', '上海', '广州', '深圳']
}
# 2. 创建 DataFrame
df = pd.DataFrame(data)
# 3. 打印 DataFrame
print(df)
输出:
姓名 年龄 城市
0 张三 25 北京
1 李四 30 上海
2 王五 28 广州
3 赵六 35 深圳
示例 2.2: 指定列和索引
# 使用示例 2.1 的数据
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [25, 30, 28, 35],
'城市': ['北京', '上海', '广州', '深圳']
}
# 创建时指定列的顺序和行索引
df_custom = pd.DataFrame(
data,
columns=['姓名', '城市', '年龄'], # 指定列顺序
index=['ID001', 'ID002', 'ID003', 'ID004'] # 指定行索引
)
print(df_custom)
输出:
姓名 城市 年龄
ID001 张三 北京 25
ID002 李四 上海 30
ID003 王五 广州 28
ID004 赵六 深圳 35
从列表的列表 创建 DataFrame
当你有一个类似表格的二维列表结构时,可以使用这种方法。

- 外层列表代表每一行。
- 内层列表代表每一行的数据。
# 1. 准备数据:一个二维列表
data_list = [
['张三', 25, '北京'],
['李四', 30, '上海'],
['王五', 28, '广州']
]
# 2. 创建 DataFrame (需要指定列名)
df_from_list = pd.DataFrame(data_list, columns=['姓名', '年龄', '城市'])
print(df_from_list)
输出:
姓名 年龄 城市
0 张三 25 北京
1 李四 30 上海
2 王五 28 广州
从 NumPy 数组 创建 DataFrame
NumPy 是 Pandas 的底层依赖,两者结合非常紧密。
# 1. 准备数据:一个二维 NumPy 数组
data_array = np.array([
[1, 'A', 100],
[2, 'B', 200],
[3, 'C', 300]
])
# 2. 创建 DataFrame
df_from_array = pd.DataFrame(data_array, columns=['ID', 'Grade', 'Score'])
print(df_from_array)
输出:
ID Grade Score
0 1 A 100
1 2 B 200
2 3 C 300
从列表的字典 创建 DataFrame
这种方式与从字典创建类似,但结构略有不同,数据是按行组织的。
- 外层列表代表每一行。
- 内层字典的键是列名,值是对应单元格的数据。
# 1. 准备数据:一个字典的列表
data_list_of_dicts = [
{'姓名': '张三', '年龄': 25, '城市': '北京'},
{'姓名': '李四', '年龄': 30, '城市': '上海'},
{'姓名': '王五', '年龄': 28, '城市': '广州', '职业': '工程师'} # 注意这一行多了一个字段
]
# 2. 创建 DataFrame
# Pandas 会自动处理缺失值,用 NaN (Not a Number) 填充
df_from_dict_list = pd.DataFrame(data_list_of_dicts)
print(df_from_dict_list)
输出:
姓名 年龄 城市 职业
0 张三 25 北京 NaN
1 李四 30 上海 NaN
2 王五 28 广州 工程师
注意:当某一行缺少某个字段时,Pandas 会自动用
NaN(代表缺失值) 填充。
创建一个空的 DataFrame
你可能想先创建一个空的 DataFrame,之后再逐步添加数据。
# 创建一个只有列名的空 DataFrame empty_df = pd.DataFrame(columns=['姓名', '年龄', '城市']) print(empty_df)
输出:
Empty DataFrame
Columns: [姓名, 年龄, 城市]
Index: []
从外部文件 创建 DataFrame (非常重要)
在实际应用中,DataFrame 最常见的来源是外部文件,如 CSV、Excel 等。
从 CSV 文件创建
假设你有一个名为 data.csv 的文件,内容如下:
姓名,年龄,城市 张三,25,北京 李四,30,上海 王五,28,广州
使用 pd.read_csv() 函数:
# 如果文件在当前目录下
df_from_csv = pd.read_csv('data.csv')
# 如果文件有路径,请提供完整路径,
# df_from_csv = pd.read_csv('C:/Users/YourUser/Documents/data.csv')
print(df_from_csv)
输出:
姓名 年龄 城市
0 张三 25 北京
1 李四 30 上海
2 王五 28 广州
从 Excel 文件创建
假设你有一个名为 data.xlsx 的 Excel 文件,第一个工作表名为 "Sheet1"。
使用 pd.read_excel() 函数,你可能需要先安装 openpyxl 或 xlrd 库:pip install openpyxl
# 读取 Excel 文件
df_from_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df_from_excel)
| 数据源 | 方法 | 适用场景 |
|---|---|---|
| 字典 | pd.DataFrame(dict) |
最常用,列名和数据清晰定义。 |
| 列表的列表 | pd.DataFrame(list_of_lists, columns=[...]) |
数据已按行组织,类似表格。 |
| NumPy 数组 | pd.DataFrame(array, columns=[...]) |
处理数值型数据,与科学计算库结合紧密。 |
| 列表的字典 | pd.DataFrame(list_of_dicts) |
数据按行组织,每行是一个字典,列名不统一。 |
| 空 DataFrame | pd.DataFrame(columns=[...]) |
先定义结构,再动态填充数据。 |
| CSV 文件 | pd.read_csv('file.csv') |
从逗号分隔的文本文件加载数据。 |
| Excel 文件 | pd.read_excel('file.xlsx') |
从 Microsoft Excel 文件加载数据。 |
对于初学者来说,从字典创建 DataFrame 是必须掌握的核心技能,随着你处理的数据越来越复杂,从文件读取 会成为你日常工作流中最重要的部分。
