杰瑞科技汇

Python列表如何转DataFrame?

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

Python列表如何转DataFrame?-图1
(图片来源网络,侵删)

准备工作:安装 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

在这个例子中:

Python列表如何转DataFrame?-图2
(图片来源网络,侵删)
  • 列名默认为 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'] 的元素作为第一行的列名。
  • 如果你不喜欢默认的列名,可以轻松地自定义。

自定义列名和行索引

在实际应用中,我们几乎总是需要自定义列名,有时也需要自定义行索引。

Python列表如何转DataFrame?-图3
(图片来源网络,侵删)

方法: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]} 性能最好,适合大型数据集,列名和数据分离明确。 需要确保所有列表长度一致。

核心要点

  1. 核心函数:所有转换都围绕 pandas.DataFrame() 这个构造函数。
  2. 列名来源
    • 对于二维列表,默认使用第一行作为列名。
    • 对于字典列表,自动使用字典的键作为列名。
    • 对于列表的字典,自动使用字典的键作为列名。
    • 你可以通过 columns 参数覆盖任何默认的列名。
  3. 数据类型:Pandas 会自动推断数据类型(数字变成 intfloat,文本变成 object)。
  4. 缺失值:当数据不完整时(如字典列表中缺少某个键),Pandas 会用 NaN 表示,这为后续的数据清洗提供了便利。

选择哪种方式取决于你的数据来源和个人偏好,对于大多数情况,字典列表列表的字典是更推荐、更清晰的做法。

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