在特定的行/列pandas中插入NA

时间:2018-05-15 04:49:55

标签: python pandas

我想将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:无法分配给函数调用

1 个答案:

答案 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