上一篇
从列表创建DataFrame
这是最基础的方法,使用列表或列表的列表来创建DataFrame。每个内部列表代表一行数据。
基本语法:
import pandas as pd
data = [['Alice', 25], ['Bob', 30], ['Charlie', 35]]
df = pd.DataFrame(data, columns=['Name', 'Age'])
代码示例:
# 导入pandas库
import pandas as pd
# 创建数据列表
employees = [
['John', 'Marketing', 45000],
['Sarah', 'Engineering', 72000],
['Mike', 'Sales', 58000],
['Emma', 'HR', 51000]
]
# 创建DataFrame
df = pd.DataFrame(employees,
columns=['Name', 'Department', 'Salary'])
# 显示前3行
print(df.head(3))
输出结果:
Name Department Salary 0 John Marketing 45000 1 Sarah Engineering 72000 2 Mike Sales 58000
优点
- 简单直观,适合少量数据
- 不需要预定义数据结构
- 易于理解,适合初学者
缺点
- 不适合大型数据集
- 缺乏列数据类型控制
- 代码可读性随数据量增加而降低
从字典创建DataFrame
最常用的方法,字典的键成为列名,值成为列数据。这种方式更符合DataFrame的列式结构。
基本语法:
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]}
df = pd.DataFrame(data)
代码示例:
# 创建字典数据
product_data = {
'ProductID': [101, 102, 103, 104],
'ProductName': ['Laptop', 'Mouse', 'Keyboard', 'Monitor'],
'Price': [1200, 25, 45, 300],
'InStock': [True, True, False, True]
}
# 从字典创建DataFrame
df = pd.DataFrame(product_data)
# 显示整个DataFrame
print(df)
输出结果:
ProductID ProductName Price InStock 0 101 Laptop 1200 True 1 102 Mouse 25 True 2 103 Keyboard 45 False 3 104 Monitor 300 True
优点
- 结构清晰,列名与数据明确关联
- 支持不同长度的列(自动填充NaN)
- 易于添加/删除列
缺点
- 字典值必须是列表或数组
- 创建后行索引默认从0开始
- 不直接支持行方向的构造
从NumPy数组创建
适合数值数据处理,特别是当数据已存在于NumPy数组中时,可以实现高效转换。
基本语法:
import numpy as np
import pandas as pd
array = np.array([[1, 2], [3, 4]])
df = pd.DataFrame(array, columns=['A', 'B'])
代码示例:
import numpy as np
# 创建NumPy数组
sensor_data = np.array([
[1, 23.4, 0.55],
[2, 24.1, 0.62],
[3, 22.8, 0.58],
[4, 25.3, 0.67]
])
# 从NumPy数组创建DataFrame
df = pd.DataFrame(sensor_data,
columns=['SensorID', 'Temperature', 'Humidity'])
# 显示DataFrame信息
print(df.info())
print("\n描述性统计:")
print(df.describe())
输出结果:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 4 entries, 0 to 3 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SensorID 4 non-null float64 1 Temperature 4 non-null float64 2 Humidity 4 non-null float64 dtypes: float64(3) memory usage: 224.0 bytes None 描述性统计: SensorID Temperature Humidity count 4.0 4.000000 4.000000 mean 2.5 23.900000 0.605000 std 1.3 1.076388 0.051234 min 1.0 22.800000 0.550000 25% 1.8 23.325000 0.572500 50% 2.5 23.750000 0.600000 75% 3.2 24.400000 0.642500 max 4.0 25.300000 0.670000
优点
- 高性能,适合大型数值数据集
- 无缝集成NumPy的数学运算
- 内存效率高
缺点
- 主要适用于数值数据
- 需要额外导入NumPy库
- 列名需要单独指定
从CSV文件创建
实际工作中最常用的方法,适合从外部文件加载数据。Pandas提供了强大的CSV读取功能。
基本语法:
df = pd.read_csv('filename.csv')
代码示例:
# 从CSV文件读取数据
# 假设有一个名为'sales_data.csv'的文件
# 内容如下:
# Date,Product,Quantity,Revenue
# 2023-01-01,A,15,450
# 2023-01-01,B,8,320
# 2023-01-02,A,12,360
# 2023-01-02,B,10,400
df = pd.read_csv('sales_data.csv', parse_dates=['Date'])
# 显示前2行
print("前2行数据:")
print(df.head(2))
# 按日期分组计算总收入
daily_revenue = df.groupby('Date')['Revenue'].sum()
print("\n每日总收入:")
print(daily_revenue)
输出结果:
前2行数据: Date Product Quantity Revenue 0 2023-01-01 A 15 450 1 2023-01-01 B 8 320 每日总收入: Date 2023-01-01 770 2023-01-02 760 Name: Revenue, dtype: int64
优点
- 适合处理真实世界的大型数据集
- 支持各种数据格式选项(分隔符、编码等)
- 内存映射支持处理超过内存大小的文件
缺点
- 需要数据文件存在于文件系统
- 需要处理文件路径和格式问题
- 错误处理更复杂(如编码问题)
四种方法比较
以下表格总结了四种创建DataFrame方法的主要特点和使用场景:
方法 | 适用场景 | 性能 | 灵活性 | 数据类型支持 |
---|---|---|---|---|
从列表创建 | 小规模数据、简单示例 | ⭐ | ⭐ | 基本类型 |
从字典创建 | 中等规模数据、结构化数据 | ⭐⭐ | ⭐⭐⭐ | 所有Pandas支持的类型 |
从NumPy数组创建 | 数值计算、科学计算 | ⭐⭐⭐⭐ | ⭐⭐ | 主要是数值类型 |
从CSV文件创建 | 真实世界数据、大数据集 | ⭐⭐⭐ | ⭐⭐⭐⭐ | 所有类型(需要正确解析) |
使用建议:
- 对于学习和快速原型,推荐使用字典方法
- 处理数值数据时,考虑使用NumPy数组方法
- 在真实项目中,CSV文件方法是最常见的选择
- 小型临时数据集可使用列表方法
总结
Python的Pandas库提供了多种灵活的方法来创建DataFrame,每种方法都有其特定的使用场景和优势。掌握这些方法可以帮助你:
- 根据数据来源选择最合适的创建方式
- 提高数据处理的效率和性能
- 编写更清晰、更易维护的数据处理代码
- 在不同场景间灵活切换数据处理方法
发表评论