以下是 Pandas 主要数据结构的创建方式整理,涵盖 Series 和 DataFrame 的常见创建方法:
一、Series 创建方式
- 从列表/数组创建
import pandas as pd
import numpy as np
# 基础列表
s1 = pd.Series([1, 3, 5, np.nan, 6])
# 指定索引
s2 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
# 从 NumPy 数组
arr = np.array([2, 4, 6])
s3 = pd.Series(arr)
- 从字典创建
data = {'a': 1, 'b': 2, 'c': 3}
s = pd.Series(data) # 字典键自动作为索引
- 标量值创建
s = pd.Series(5, index=[0, 1, 2, 3]) # 所有值为5
二、DataFrame 创建方式
- 从字典创建
# 列式字典
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 28],
'Score': [92.5, 85.0, 88.5]
}
df1 = pd.DataFrame(data)
# 指定索引
df2 = pd.DataFrame(data, index=['a', 'b', 'c'])
- 从列表的列表创建
data = [
['Alice', 25, 92.5],
['Bob', 30, 85.0],
['Charlie', 28, 88.5]
]
df = pd.DataFrame(data, columns=['Name', 'Age', 'Score'])
- 从嵌套字典创建
data = {
'2020': {'A': 100, 'B': 200},
'2021': {'A': 110, 'C': 210}
}
df = pd.DataFrame(data) # 外层字典键为列名,内层键为索引
- 从 NumPy 数组创建
arr = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
df = pd.DataFrame(arr, columns=['X', 'Y', 'Z'])
- 从结构化数组创建
dtype = [('Name', 'U10'), ('Age', 'i4'), ('Score', 'f4')]
data = np.array([
('Alice', 25, 92.5),
('Bob', 30, 85.0)
], dtype=dtype)
df = pd.DataFrame(data)
- 从文件/外部数据源创建
# 从 CSV
df_csv = pd.read_csv('data.csv')
# 从 Excel
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 从 SQL 数据库
import sqlite3
conn = sqlite3.connect('database.db')
df_sql = pd.read_sql('SELECT * FROM table', conn)
三、特殊创建方式
- 时间序列索引
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=['A','B','C','D'])
- 随机数据生成
df = pd.DataFrame(np.random.rand(3,4)) # 均匀分布
df = pd.DataFrame(np.random.randn(3,4)) # 正态分布
- 从其他数据结构转换
# 从 Series 字典
s_dict = {
'A': pd.Series([1, 2, 3]),
'B': pd.Series([4, 5, 6, 7])
}
df = pd.DataFrame(s_dict)
四、高级创建技巧
- 指定数据类型
df = pd.DataFrame(
data = {'A': [1, 2], 'B': ['X', 'Y']},
dtype = {'A': 'float32', 'B': 'category'}
)
- 混合类型创建
df = pd.DataFrame({
'IntCol': [1, 2, 3],
'FloatCol': [1.1, 2.2, 3.3],
'StrCol': ['A', 'B', 'C'],
'DateCol': pd.date_range('20200101', periods=3)
})
- 空 DataFrame 创建
empty_df = pd.DataFrame(columns=['A', 'B', 'C'])
五、创建方式对比
方式 | 适用场景 | 优点 | 注意事项 |
---|---|---|---|
字典创建 | 列式数据组织 | 直观易读 | 各列长度必须一致 |
列表的列表创建 | 行式数据输入 | 适合小规模数据 | 需配合columns参数 |
NumPy数组创建 | 数值型数据处理 | 高性能 | 需手动添加列名 |
文件读取 | 大数据集加载 | 支持多种格式 | 注意编码和内存管理 |
时间序列创建 | 金融/时序数据分析 | 内置时间处理功能 | 索引需排序 |
空DataFrame创建 | 动态构建数据结构 | 灵活填充数据 | 需后续维护列结构一致性 |
六、最佳实践建议
- 优先使用字典创建:当数据以列形式组织时最直观
- 大数据使用文件读取:避免内存溢出
- 明确指定数据类型:防止自动类型推断错误
- 索引管理:合理设置索引提升查询性能
- 验证数据完整性:检查NaN和异常值
掌握这些创建方式后,可以灵活应对各种数据初始化场景。