当前位置:首页 > Python > 正文

Pandas行数据添加完全指南 - Python数据分析技巧

Pandas行数据添加完全指南

掌握多种方法在DataFrame中添加行数据

Python
Pandas
数据分析

Pandas行添加的重要性

在数据分析工作中,向现有数据集添加新行是一项常见任务。无论是新增记录、合并数据集还是更新信息,掌握高效的添加行方法至关重要。

本教程将详细介绍Pandas中添加行数据的三种主要方法:loc[]append()concat(),并分析它们的适用场景和性能特点。

方法一:使用loc添加行

loc[]是Pandas中最常用的行标签索引器,也可用于添加新行。

基本用法

import pandas as pd

# 创建初始DataFrame
df = pd.DataFrame({
    '姓名': ['张三', '李四'],
    '年龄': [25, 30],
    '城市': ['北京', '上海']
})

# 使用loc添加新行
df.loc[2] = ['王五', 28, '广州']

print(df)

添加多行

# 添加多行数据
new_rows = [
    ['赵六', 35, '深圳'],
    ['钱七', 40, '杭州']
]

for row in new_rows:
    df.loc[len(df)] = row

print(df)

优点与注意事项

  • 直接修改原始DataFrame,无需创建副本
  • 适用于少量行的添加
  • 添加多行时效率较低(推荐使用concat代替)
  • 确保新行数据的顺序与列顺序匹配

方法二:使用append添加行

append()方法用于将其他DataFrame或类似结构的数据添加到现有DataFrame的末尾。

基本用法

# 创建新行DataFrame
new_data = pd.DataFrame({
    '姓名': ['孙八'],
    '年龄': [45],
    '城市': ['南京']
})

# 使用append添加行
df = df.append(new_data, ignore_index=True)

print(df)

添加字典数据

# 添加字典形式的数据
df = df.append(
    {'姓名': '周九', '年龄': 33, '城市': '成都'}, 
    ignore_index=True
)

print(df)

重要说明

在Pandas 1.4.0及以上版本中,append()方法已被标记为弃用,并将在未来版本中移除。官方推荐使用concat()替代。

方法三:使用concat添加行(推荐)

concat()是Pandas中最灵活、最高效的数据合并方法,尤其适合批量添加行。

基本用法

# 创建新行DataFrame
new_rows = pd.DataFrame({
    '姓名': ['吴十', '郑十一'],
    '年龄': [29, 31],
    '城市': ['武汉', '西安']
})

# 使用concat添加行
df = pd.concat([df, new_rows], ignore_index=True)

print(df)

性能优势

与循环添加或append相比,concat在添加大量行时性能更优:

添加1000行测试

  • loc[]循环: ~120ms
  • append(): ~60ms
  • concat(): ~5ms

添加10000行测试

  • loc[]循环: ~1200ms
  • append(): ~550ms
  • concat(): ~25ms

方法比较与最佳实践

方法 适用场景 性能 是否原地修改 未来兼容性
loc[] 添加单行或少量行 良好
append() 添加少量行(已弃用)
concat() 添加单行或多行(推荐) 优秀

最佳实践总结

  1. 少量行添加:使用loc[]方法简单直接
  2. 批量行添加:始终使用concat()以获得最佳性能
  3. 避免使用append()方法(已弃用)
  4. 索引处理:使用ignore_index=True重置索引
  5. 内存考虑:大文件操作时使用concat()减少内存占用

常见问题解答

Q1: 添加行时出现列不匹配错误怎么办?

确保新数据的列与原始DataFrame匹配。可以使用reindex()对齐列:

new_row = pd.Series({'姓名': '董十二', '年龄': 27, '城市': '重庆'})
new_row = new_row.reindex(df.columns)
df = pd.concat([df, new_row.to_frame().T], ignore_index=True)

Q2: 如何高效添加大量数据行?

推荐方法:

  1. 收集所有新行数据到一个列表中
  2. 一次性创建新DataFrame
  3. 使用concat()合并
# 收集新数据
new_data_list = [
    {'姓名': '魏十三', '年龄': 38, '城市': '天津'},
    {'姓名': '蒋十四', '年龄': 42, '城市': '苏州'}
]

# 批量创建DataFrame
new_df = pd.DataFrame(new_data_list)

# 高效合并
df = pd.concat([df, new_df], ignore_index=True)

结论

掌握Pandas中添加行数据的方法对数据分析工作至关重要。虽然Pandas提供了多种添加行的方法,但根据场景选择合适的方法可以显著提高代码效率和可维护性。

总结建议:

  • 少量行添加 → 使用loc[]
  • 批量行添加 → 使用concat()
  • 避免使用 → append()(已弃用)

高效的数据操作是数据分析工作的基础,掌握这些技巧将使你的Pandas代码更加专业和高效。

发表评论