创建一个DataFrame
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(12).reshape(3,4),index=['x','y','z'],columns=['a','b','c','d'])
print(df)
'''
a b c d
x 0 1 2 3
y 4 5 6 7
z 8 9 10 11
'''
删除行
删除单行
# 删除索引为 x 的行
df.drop('x',axis=0,inplace=True)
df.drop(index='x', axis=0, inplace=True)
# 以人的思维来数,删除第三行。也就是对应例子中的z行
df.drop(df.index[2:3], axis=0, inplace=True)
df.drop(df.index[2], axis=0, inplace=True)
df.drop(df.index[[2]], axis=0, inplace=True)
删除多行
# 删除索引为 x y 的行
df.drop(index=['x','y'],axis=0,inplace=True)
# 删除前两行
df.drop(index=df.index[0:2], axis=0, inplace=True)
# 删除前两行(注意中括号的数量是两对)
x=[0, 1]
df.drop(index=df.index[x], axis=0, inplace=True)
删除列
删除单列
# 指定列名删除
df.drop('a',axis=1,inplace=True)
del df['a']
# 以人的思维来数,删除第三列。也就是对应例子中的c列
df.drop(df.columns[2:3], axis=1, inplace=True)
df.drop(df.columns[2], axis=1, inplace=True)
df.drop(df.columns[[2]], axis=1, inplace=True)
删除多列
# 指定列名删除
df.drop(['a','c'],axis=1,inplace=True)
# 删除前两列
df.drop(df.columns[0:2], axis=1, inplace=True)
# 删除前两列
x=[0, 1]
df.drop(df.columns[x], axis=1, inplace=True)
按条件删除
思路是根据条件查询, 提取索引,然后删除
# 删除名字里含张和李的。(不单单指张姓和李姓)
ind = list(df.loc[df['name'].str.contains('李') | df['name'].str.contains('张')].index)
df = df.drop(index=ind, axis=0)
# 删除所有年龄小于18的
ind = list(df[df.age<18].index)
df.drop(index=ind,axis=0,inplace=True)
https://blog.csdn.net/qq_18351157/article/details/105785367
参数axis
参数axis满足如下条件
- axis参数不写,默认是0
- axis=0 与 axis=‘index’ 表示对行操作
- axis=1 与 axis=‘columns’ 表示对列操作
指定了axis,就是要让这个axis动起来(类似被for变量),其他的axis保持不变
行操作
# 删除索引为 x 的那一行
df.drop('x',axis=0, inplace=True)
# axis=0指定对行操作,让行动起来,列是固定的,所以最终输出每一列的平均值
print(df.mean(axis=0))
'''
a 4.0
b 5.0
c 6.0
d 7.0
'''
# axis=0指定对行操作,让行动起来,最终输出每一列的和
# df.loc['col_sum'] = df.sum(axis=0)
df.loc['col_sum',:] = df.sum(axis=0)
print(df)
'''
a b c d
x 0.0 1.0 2.0 3.0
y 4.0 5.0 6.0 7.0
z 8.0 9.0 10.0 11.0
col_sum 12.0 15.0 18.0 21.0
'''
# 等价于:
def get_col_sum(x):
return x['x']+x['y']+x['z']
df.loc['col_sum',:] = df.apply(get_col_sum, axis=0)
print(df)
列操作
# 删除列名为 a 的列
df.drop('a',axis=1, inplace=True)
# axis=1指定对列操作,让列动起来,行是固定的,所以最终输出每一行的平均值
print(df.mean(axis=1))
'''
x 1.5
y 5.5
z 9.5
'''
# axis=1指定对列操作,让列动起来 最终输出每一行的和
# df['row_sum'] = df.sum(axis=1)
df.loc[:,'row_sum'] = df.sum(axis=1)
'''
a b c d col_sum
x 0 1 2 3 6
y 4 5 6 7 22
z 8 9 10 11 38
'''
# 等价于
def get_row_sum(x):
return x['a']+x['b']+x['c']+x['d']
df.loc[:,'row_sum'] = df.apply(get_row_sum, axis=1)
print(df)