df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list(‘abcd‘), index=[‘1‘, ‘2‘, ‘3‘, ‘4‘])
print(df)
a b c d
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
4 12 13 14 15
1,根据列名称删除列
方法一,用del
del df[‘b‘] # 删除b列,好像无法删除多列
方法二,用drop,删除b,c列,下列三种方法等价
df = df.drop([‘b‘, ‘c‘], axis=1) # 默认drop不会替换掉原df,即inplace为False
df.drop([‘b‘, ‘c‘], axis=1, inplace=True) # inplace为True则直接替换掉了原df
df.drop(df.columns[[1,2]], axis=1, inplace=True)
2,根据索引名称删除行
df = df.drop([‘1‘, ‘2‘]) # 删除index为1和2的行,注意创建df时将index设置为str了,默认是int,还有2种等价方法参考列drop
3,根据value值删除行
df= df[~df[‘b‘].isin([‘5‘, ‘9‘])] # 用bool筛选方法,删除b列中含有5,9的行
4,根据value值去重删除行
df.loc[‘2‘,‘b‘]=9 #此时b列有2个含有9了,要去重删除一个
df=df.loc[df[‘b‘].drop_duplicates().index]
5,增加行
方法一,loc增加
df.loc[‘5‘] = [3, 3, 3, 3]
方法二,用set_value
df.set_value(‘5‘, df.columns, [3,3,3,3], takeable=False)
备注:df增加行没找到类似insert这种(列有),可以插入行的方法,暂时替代方法:
df.loc[‘5‘] = [3, 3, 3, 3]
df = df.reindex(index = list(‘12534‘))
或者:
list = df.index
df.loc[‘5‘] = [3, 3, 3, 3]
df = df.reindex(index = list.insert(2, ‘5‘))
6,df增加列
方法一:iloc遍历赋值
有时可能需要遍历赋值,例如新增一列e,等于c列和d列值的和,这种方法能成功,但有 SettingWithCopyWarning告警,查了下貌似推荐用loc遍历
df[‘e‘] = np.NaN # 需事先创建e列,否则iloc遍历会报错,loc遍历无需事先创建
for i in range(len(df)):
df[‘e‘].iloc[i] = df[‘c‘].iloc[i] + df[‘d‘].iloc[i]
方法二:loc遍历赋值(推荐!!)
for i in df.index:
df.loc[i, ‘e‘] = df.loc[i, ‘c‘] + df.loc[i, ‘d‘]
方法三:loc一次性赋值
df.loc[:, ‘e‘] = [x + y for x, y in zip(df[‘c‘], df[‘d‘])]
df.loc[[‘2‘, ‘3‘], ‘e‘] = [3, 3] # 也可以只选第2第3行复制
方法四:insert
df.insert(0, ‘e‘, [3, 3, 3, 3]) # 加在第一列
方法五:直接加
df[‘e‘] = [3, 3, 3, 3] # 加在最后一列
方法六:其他
增加3列,efg,value默认为np.NaN
df = pd.concat([df, pd.DataFrame(columns=list(‘efg‘))]) # 列的次序无法指定,并且fillna时会对整个df做出调整
df = df.reindex(columns=list(‘abcdefg‘), fill_value=0) # 列的次序按照list指定,并且fill_value只对新增列做出调整,推荐!
原文地址:https://www.cnblogs.com/guxh/p/9420610.html