我想将NA放在某些行/列位置。
df_test = pd.DataFrame(np.random.randn(5, 3),
index=['a', 'b', 'c', 'd', 'e'],
columns=['one', 'two', 'three'])
rows = pd.Series([True, False, False, False, True], index = df_test.index)
我想在指定的行中添加NA并且没有列'两个'。我试过这个:
df_test[rows].drop(['two'], axis = 1) = np.nan
但这会返回错误:
SyntaxError:无法分配给函数调用
答案 0 :(得分:3)
这不起作用,Python根本不支持这种语法,即分配给函数调用。此外,drop
会返回一个副本,因此删除列并对返回的DataFrame进行操作不会修改原始文件。
以下是您可以使用的几种替代方案。
loc
+ pd.Index.difference
在这里,您需要基于loc
的作业:
df_test.loc[rows, df_test.columns.difference(['two'])] = np.nan
df_test
one two three
a NaN 0.205799 NaN
b 0.296389 -0.508247 0.026844
c 0.970879 -0.549491 -0.056991
d -1.474168 -1.694579 1.493165
e NaN -0.159641 NaN
loc
就地工作,根据需要修改原始DataFrame。如果您愿意,也可以将df_test.columns.difference(['two'])
替换为['one', 'three']
。
df.set_value
对于较旧的pandas版本,您可以使用df.set_value
(非就地) -
df_test.set_value(df_test.index[rows], df_test.columns.difference(['two']), np.nan)
one two three
a NaN 1.562233 NaN
b -0.755127 -0.862368 -0.850386
c -0.193353 -0.033097 1.005041
d -1.679028 1.006895 -0.206164
e NaN -1.376300 NaN