这是一篇最基础的Pandas用法总结,也方便自己日后进行复习与查询。
这一次我们来总结一下Pandas中的一些增删改基本操作。
df = pd.DataFrame([['F',90, 88, 85],
['M', 75, 97, 74],
['F', 82, 73, 91],
['M', 93, 99, 96]],
columns=['gender','chinese', 'math', 'english'],
index = ['小红', '小亮', '小兰', '小明'])
print(df)
[out]:
gender chinese math english
小红 F 90 88 85
小亮 M 75 97 74
小兰 F 82 73 91
小明 M 93 99 96
1. 增
1.1 增添一行
# 使用.loc()
df.loc['小白'] = ['F', 75, 64, 79]
df
[out]:
gender chinese math english
小红 F 90 88 85
小亮 M 75 97 74
小兰 F 82 73 91
小明 M 93 99 96
小白 F 75 64 79
-----------------------------------
# 使用.append()
row = {'gender': 'F', 'chinese': 45, 'math': 57, 'english': 66}
s = pd.Series(row, name='小花')
df = df.append(s) # 注意append之后还要再赋值给df,否则df不会更改
df
[out]:
gender chinese math english
小红 F 90 88 85
小亮 M 75 97 74
小兰 F 82 73 91
小明 M 93 99 96
小白 F 75 64 79
小花 F 45 57 66
----------------------------------------
'''
或者可以直接把字典row传入到.append()当中,
但是由于df中的列索引为标签形式,直接传入row会报错,
需要使用igore_index = True
'''
df.append(row, ignore_index = True)
[out]:
gender chinese math english
0 F 90 88 85
1 M 75 97 74
2 F 82 73 91
3 M 93 99 96
4 F 75 64 79
5 F 45 57 66
6 F 45 57 66
1.2 增添一列
# 使用列表增添新的一列age
# 默认添加到最后一列
df['age'] = [17, 18, 18, 17, 16, 17]
df
[out]:
gender chinese math english age
小红 F 90 88 85 17
小亮 M 75 97 74 18
小兰 F 82 73 91 18
小明 M 93 99 96 17
小白 F 75 64 79 16
小花 F 45 57 66 17
------------------------------------------
# 基于已有的一列创建新的一列
# 语文成绩每人加5分
df['chinese_new'] = df['chinese'] + 5
df
[out]:
gender chinese math english age chinese_new
小红 F 90 88 85 17 95
小亮 M 75 97 74 18 80
小兰 F 82 73 91 18 87
小明 M 93 99 96 17 98
小白 F 75 64 79 16 80
小花 F 45 57 66 17 50
-------------------------------------------------------
# 基于已有的多列创建新的一列
# 计算三科总成绩
df['sum_score'] = df['chinese'] + df['math'] + df['english']
df
[out]:
gender chinese math english age chinese_new sum_score
小红 F 90 88 85 17 95 263
小亮 M 75 97 74 18 80 246
小兰 F 82 73 91 18 87 246
小明 M 93 99 96 17 98 288
小白 F 75 64 79 16 80 218
小花 F 45 57 66 17 50 168
-----------------------------------------------------------------
# 使用.insert()将一列添加到指定位置
# 添加'class'至第一列
df.insert(0, 'class', [1,2,2,1,2,3])
[out]:
class gender chinese math english age chinese_new sum_score
小红 1 F 90 88 85 17 95 263
小亮 2 M 75 97 74 18 80 246
小兰 2 F 82 73 91 18 87 246
小明 1 M 93 99 96 17 98 288
小白 2 F 75 64 79 16 80 218
小花 3 F 45 57 66 17 50 168
2. 删
2.1 删除一列
- 使用del
del df['chinese_new']
df
[out]:
class gender chinese math english age sum_score
小红 1 F 90 88 85 17 263
小亮 2 M 75 97 74 18 246
小兰 2 F 82 73 91 18 246
小明 1 M 93 99 96 17 288
小白 2 F 75 64 79 16 218
小花 3 F 45 57 66 17 168
- 使用.drop()函数
# 第一种方式,传入要删除的列名组成的列表,和参数axis=1
# axis=1删除列,axis=0删除行
df = df.drop(['sum_score'], axis=1, inplace=False)
df
[out]:
class gender chinese math english age
小红 1 F 90 88 85 17
小亮 2 M 75 97 74 18
小兰 2 F 82 73 91 18
小明 1 M 93 99 96 17
小白 2 F 75 64 79 16
小花 3 F 45 57 66 17
------------------------------------------------
# 第二种方式,传入columns参数
df = df.drop(columns = ['age'])
df
[out]:
class gender chinese math english age
小红 1 F 90 88 85 17
小亮 2 M 75 97 74 18
小兰 2 F 82 73 91 18
小明 1 M 93 99 96 17
小白 2 F 75 64 79 16
小花 3 F 45 57 66 17
2.2 删除一行
# 第一种方式,传入要删除的行索引的列表,axis=0
df = df.drop(['小花'], axis=0, inplace=False)
df
[out]:
class gender chinese math english age
小红 1 F 90 88 85 17
小亮 2 M 75 97 74 18
小兰 2 F 82 73 91 18
小明 1 M 93 99 96 17
小白 2 F 75 64 79 16
------------------------------------------------
# 第二种方式,传入index参数
df = df.drop(index=['小白'])
df
[out]:
class gender chinese math english age
小红 1 F 90 88 85 17
小亮 2 M 75 97 74 18
小兰 2 F 82 73 91 18
小明 1 M 93 99 96 17
-----------------------------------------------
# 或者可以直接传入DataFrame的index对象
df = df.drop(df[df['class'] == 1].index)
df
[out]:
class gender chinese math english age
小亮 2 M 75 97 74 18
小兰 2 F 82 73 91 18
关于drop函数可参考这篇博文:drop函数使用