4.4 DataFrame的行与列操作(添加、删除、修改)
Pandas DataFrame行与列操作完全指南 - 添加、删除、修改
本章节详细讲解了Pandas DataFrame的行与列操作,包括添加、删除和修改行与列的方法,提供简单易懂的示例,适合数据分析新手学习。
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=1和inplace=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参数进行原地修改。掌握这些技巧,您将能更高效地处理和分析数据。