Pandas 中文手册

4.4 DataFrame的行与列操作(添加、删除、修改)

Pandas DataFrame行与列操作完全指南 - 添加、删除、修改

Pandas 中文手册

本章节详细讲解了Pandas DataFrame的行与列操作,包括添加、删除和修改行与列的方法,提供简单易懂的示例,适合数据分析新手学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

DataFrame的行与列操作详解

在Pandas中,DataFrame是数据分析的核心数据结构,它类似于Excel表格,由行和列组成。行通常表示数据记录,列表示数据特征。掌握DataFrame的行与列操作是数据分析的基础,本章将深入讲解如何添加、删除和修改行与列,帮助您高效处理数据。

1. 添加列

添加列是为DataFrame增加新特征的过程,常见方法有直接赋值、assign()方法和apply()方法。

直接赋值

这是最简单的方法,通过指定新列名和值来添加列。值可以是一个列表、数组或标量。

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print("原始DataFrame:")
print(df)

# 直接赋值添加列
df['C'] = [7, 8, 9]  # 列表赋值
df['D'] = 10  # 标量赋值,所有行值相同
print("添加列C和D:")
print(df)

assign()方法

assign()方法返回一个新DataFrame,添加列而不修改原DataFrame,适合链式操作。

# 使用assign()添加列
df_new = df.assign(E=lambda x: x['A'] + x['B'], F=[11, 12, 13])
print("使用assign添加列E和F:")
print(df_new)
print("原DataFrame不变:")
print(df)

apply()方法

apply()方法用于基于现有列应用函数来创建新列,适合复杂计算。

# 使用apply()添加列
df['G'] = df.apply(lambda row: row['A'] * row['B'], axis=1)
print("使用apply添加列G:")
print(df)

2. 新增行

新增行是向DataFrame中添加新数据记录,常用方法包括append()concat()和直接通过loc赋值。

append()方法

append()方法用于将一个DataFrame或字典附加到原DataFrame的末尾。

# 创建新行数据
new_row = {'A': 4, 'B': 7, 'C': 9, 'D': 10, 'G': 28}
df_appended = df.append(new_row, ignore_index=True)  # ignore_index=True重置索引
print("使用append添加行:")
print(df_appended)

concat()方法

concat()方法用于合并多个DataFrame,可沿行或列方向拼接,比append()更灵活。

# 创建另一个DataFrame
df2 = pd.DataFrame({'A': [5], 'B': [8], 'C': [10], 'D': [10], 'G': [40]})
df_concat = pd.concat([df, df2], ignore_index=True)
print("使用concat添加行:")
print(df_concat)

loc直接赋值

通过loc索引器直接赋值新行,但需确保索引唯一且数据类型匹配。

# 使用loc添加行
df.loc[3] = [6, 9, 11, 10, 54]  # 索引3是新增行
print("使用loc添加行:")
print(df)

3. 删除列

删除列是从DataFrame中移除不需要的特征,方法有drop()del语句和pop()

drop()方法

drop()方法通过指定列名删除列,可以设置axis=1inplace=True进行原地操作。

# 使用drop()删除列
df_dropped = df.drop(['C', 'D'], axis=1)  # 删除列C和D
print("使用drop删除列C和D:")
print(df_dropped)

# 原地删除
df.drop('G', axis=1, inplace=True)
print("原地删除列G:")
print(df)

del语句

del语句直接删除列,但只能在原DataFrame上操作。

# 使用del删除列
if 'E' in df.columns:
    del df['E']  # 假设有列E
print("使用del删除列:")
print(df)

pop()方法

pop()方法删除并返回指定列,适用于需要获取被删除列数据的情况。

# 使用pop()删除列
if 'F' in df.columns:
    popped_col = df.pop('F')  # 假设有列F
    print("弹出的列数据:")
    print(popped_col)
    print("删除列F后的DataFrame:")
    print(df)

4. 删除行

删除行是移除特定数据记录,常用drop()方法和按条件筛选。

drop()方法

通过指定行索引删除行。

# 使用drop()删除行
df_dropped_rows = df.drop([0, 1])  # 删除索引0和1的行
print("使用drop删除行:")
print(df_dropped_rows)

按条件筛选删除

通过布尔条件筛选出要保留的行,实现删除。

# 按条件删除行:删除A列大于2的行
df_filtered = df[df['A'] <= 2]
print("按条件筛选删除行:")
print(df_filtered)

5. 修改列名

修改列名以改善可读性或标准化数据,常用rename()方法和直接赋值。

rename()方法

rename()方法可批量修改列名,支持字典映射。

# 使用rename()修改列名
df_renamed = df.rename(columns={'A': 'Col1', 'B': 'Col2'})
print("使用rename修改列名:")
print(df_renamed)

columns属性赋值

直接给columns属性赋值一个新列表来修改列名,需确保列表长度匹配。

# 直接赋值修改列名
df.columns = ['X', 'Y']  # 假设df有两列
print("直接赋值修改列名:")
print(df)

6. 修改行索引

行索引的修改有助于数据对齐和重组,方法包括rename()、直接赋值和reindex()

rename()方法

类似修改列名,rename()也可用于修改行索引。

# 使用rename()修改行索引
df_renamed_index = df.rename(index={0: 'row1', 1: 'row2'})
print("使用rename修改行索引:")
print(df_renamed_index)

index属性赋值

直接给index属性赋值新索引列表。

# 直接赋值修改行索引
df.index = ['a', 'b', 'c']  # 假设df有三行
print("直接赋值修改行索引:")
print(df)

reindex()方法

reindex()方法重新索引DataFrame,可调整行顺序或添加缺失行。

# 使用reindex()修改行索引
df_reindexed = df.reindex(['c', 'a', 'b'])  # 重新排序
print("使用reindex修改行索引:")
print(df_reindexed)

7. 调整列的顺序

调整列顺序以优化数据展示或处理流程,常用reindex()方法和直接赋值。

reindex()方法

通过指定列名列表来调整列顺序。

# 使用reindex()调整列顺序
df_reordered = df.reindex(columns=['B', 'A'])  # 调整顺序为B在前
print("使用reindex调整列顺序:")
print(df_reordered)

columns重新赋值

直接给columns属性赋值新顺序的列表。

# 直接赋值调整列顺序
df.columns = ['B', 'A']  # 假设df有两列
print("直接赋值调整列顺序:")
print(df)

总结

本章详细介绍了DataFrame的行与列操作,涵盖添加、删除和修改的多种方法。这些操作是数据分析的基础,建议结合实际数据练习,以加深理解。记住,Pandas操作通常返回新DataFrame,除非使用inplace=True参数进行原地修改。掌握这些技巧,您将能更高效地处理和分析数据。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包