我们将从最简单的情况开始,逐步介绍更复杂和实用的场景。

准备工作:安装 Pandas
如果你的环境中还没有安装 Pandas,请先通过 pip 安装:
pip install pandas
最简单的转换(一维列表)
当你有一个一维列表时,Pandas 会默认将其转换为一个只有一列的 DataFrame,并且行索引会自动生成(0, 1, 2, ...)。
方法:pd.DataFrame()
import pandas as pd # 1. 准备一个一维列表 my_list = ['apple', 'banana', 'cherry', 'date'] # 2. 使用 pd.DataFrame() 进行转换 df = pd.DataFrame(my_list) # 3. 查看结果 print(df)
输出结果:
0
0 apple
1 banana
2 cherry
3 date
在这个例子中:

- 列名默认为
0。 - 行索引自动生成为
0, 1, 2, 3。
二维列表(最常见的情况)
这是最常见的情况,通常你的列表是一个由多个子列表(或元组)组成的列表,每个子列表代表一行数据。
方法:pd.DataFrame()
import pandas as pd
# 1. 准备一个二维列表
# 外层列表的每个元素代表一行
# 内层列表的每个元素代表该行的一个单元格
data = [
['Alice', 25, 'New York'],
['Bob', 30, 'Los Angeles'],
['Charlie', 35, 'Chicago']
]
# 2. 使用 pd.DataFrame() 进行转换
df = pd.DataFrame(data)
# 3. 查看结果
print(df)
输出结果:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
在这个例子中:
- Pandas 非常智能,它将第一个子列表
['Alice', 25, 'New York']的元素作为第一行的列名。 - 如果你不喜欢默认的列名,可以轻松地自定义。
自定义列名和行索引
在实际应用中,我们几乎总是需要自定义列名,有时也需要自定义行索引。

方法:pd.DataFrame(data, columns=[...], index=[...])
import pandas as pd
# 1. 准备二维列表数据
data = [
['Alice', 25, 'New York'],
['Bob', 30, 'Los Angeles'],
['Charlie', 35, 'Chicago']
]
# 2. 自定义列名和行索引
custom_columns = ['Full Name', 'Age', 'Location']
custom_index = ['user_001', 'user_002', 'user_003']
df = pd.DataFrame(data, columns=custom_columns, index=custom_index)
# 3. 查看结果
print(df)
输出结果:
Full Name Age Location
user_001 Alice 25 New York
user_002 Bob 30 Los Angeles
user_003 Charlie 35 Chicago
使用字典列表创建 DataFrame
另一种非常流行且清晰的数据结构是字典列表,每个字典代表一行,键是列名,值是对应的数据,这种方式的好处是列名和数据是明确绑定的,非常直观。
方法:pd.DataFrame()
import pandas as pd
# 1. 准备一个字典列表
data = [
{'Name': 'Alice', 'Age': 25, 'City': 'New York'},
{'Name': 'Bob', 'Age': 30, 'City': 'Los Angeles'},
{'Name': 'Charlie', 'Age': 35, 'City': 'Chicago'}
]
# 2. 使用 pd.DataFrame() 进行转换
# Pandas 会自动使用字典的键作为列名
df = pd.DataFrame(data)
# 3. 查看结果
print(df)
输出结果:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
注意:如果字典中缺少某个键,Pandas 会自动用 NaN (Not a Number) 填充,这在处理不完整数据时非常有用。
data_with_missing = [
{'Name': 'Alice', 'Age': 25},
{'Name': 'Bob', 'Age': 30, 'City': 'Los Angeles'},
{'Name': 'Charlie', 'City': 'Chicago'}
]
df_missing = pd.DataFrame(data_with_missing)
print(df_missing)
输出结果:
Name Age City
0 Alice 25.0 NaN
1 Bob 30.0 Los Angeles
2 Charlie NaN Chicago
使用列表的字典创建 DataFrame
这是与字典列表相反的情况:一个字典,其值是列表,这个字典的键是列名,对应的列表是该列的所有数据,这种方式在性能上通常比字典列表更好。
方法:pd.DataFrame()
import pandas as pd
# 1. 准备一个列表的字典
# 键是列名,值是对应的列数据列表
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
# 2. 使用 pd.DataFrame() 进行转换
df = pd.DataFrame(data)
# 3. 查看结果
print(df)
输出结果:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
总结与对比
| 数据结构 | 示例 | 优点 | 缺点 |
|---|---|---|---|
| 一维列表 | ['a', 'b', 'c'] |
最简单,用于单列数据。 | 无法直接指定列名。 |
| 二维列表 | [['a', 1], ['b', 2]] |
结构紧凑,适合结构化数据。 | 列名需要单独指定,数据与列名关系不直观。 |
| 字典列表 | [{'a': 1}, {'b': 2}] |
非常直观,列名和数据绑定清晰,易于阅读和维护。 | 代码稍长,处理缺失数据时会产生 NaN。 |
| 列表的字典 | {'a': [1, 2], 'b': [3, 4]} |
性能最好,适合大型数据集,列名和数据分离明确。 | 需要确保所有列表长度一致。 |
核心要点
- 核心函数:所有转换都围绕
pandas.DataFrame()这个构造函数。 - 列名来源:
- 对于二维列表,默认使用第一行作为列名。
- 对于字典列表,自动使用字典的键作为列名。
- 对于列表的字典,自动使用字典的键作为列名。
- 你可以通过
columns参数覆盖任何默认的列名。
- 数据类型:Pandas 会自动推断数据类型(数字变成
int或float,文本变成object)。 - 缺失值:当数据不完整时(如字典列表中缺少某个键),Pandas 会用
NaN表示,这为后续的数据清洗提供了便利。
选择哪种方式取决于你的数据来源和个人偏好,对于大多数情况,字典列表和列表的字典是更推荐、更清晰的做法。
