我想知道是否有办法让.ix有多个条件。更具体地说,我试图做的是改变这一点:
In [66]: df_test
Out[66]:
A B C D E
0 -0.013863 False -0.546036 0.373015 1.002579
1 1.275009 2 0.447672 -0.393775 -1.509525
2 -0.517209 0 0.543322 2.434393 0.348002
3 1.768921 0 -1.015705 1.121779 1.548792
4 0.575418 NaN -1.803939 0.099772 0.508620
5 0.722897 0.519641 0.435199 -0.059685 -0.585716
其中:
In [67]: type(df_test.iloc[0,1])
Out[67]: bool
In [68]: type(df_test.iloc[1,1])
Out[68]: str
In [69]: type(df_test.iloc[2,1])
Out[69]: str
In [70]: type(df_test.iloc[3,1])
Out[70]: int
到此:
A B C D E
0 -0.013863 NaN -0.546036 0.373015 1.002579
1 1.275009 2 0.447672 -0.393775 -1.509525
2 -0.517209 0 0.543322 2.434393 0.348002
3 1.768921 0 -1.015705 1.121779 1.548792
4 0.575418 NaN -1.803939 0.099772 0.508620
5 0.722897 0.519641 0.435199 -0.059685 -0.585716
位置[0,1]
和[3,1]
中的项似乎都是== False
,因此,当我尝试df_test.ix[df_test.B == False, 'B'] = np.nan
时,这两个项目都转为{ {1}}。
当我尝试NaN
时,我收到以下错误:df_test.ix[df_test.B == False and type(df_test.B) == bool, 'B'] = np.nan
任何想法都会受到赞赏。
修改
KeyError: 'cannot use a single bool to index into setitem'
EDIT2 请参阅下文如何复制
In [133]: df_test
Out[133]:
A B C D E
0 -0.013863 False 1 0.373015 1.002579
1 1.275009 2 0.447672 -0.393775 -1.509525
2 -0.517209 0 3 2.434393 0.348002
3 1.768921 0 NaN 1.121779 1.548792
4 0.575418 NaN -1.80394 0.099772 0.508620
5 0.722897 0.519641 0.435199 -0.059685 -0.585716
...
In [134]: df_test.dtypes
Out[134]:
A float64
B object
C object
D float64
E float64
dtype: object
In [139]: type(df_test['B'][0])
Out[139]: bool
In [140]: type(df_test['B'][1])
Out[140]: str
In [141]: type(df_test['B'][2])
Out[141]: str
In [142]: type(df_test['B'][3])
Out[142]: int
In [143]: type(df_test['B'][4])
Out[143]: float
In [144]: df_test['B'] == False
Out[144]:
0 True
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 False
9 False
Name: B, dtype: bool
答案 0 :(得分:1)
这行代码可以满足您的需求。它会将False
的值映射到np.nan
:
df_test['B'] = df_test['B'].map(lambda x:np.nan if x == False else x)
编辑:
更好的方法就是
df[df == False] = np.nan
实际解决方案
经过一番汗水后,似乎map()
可能存在多种情况,以下工作正常:
df_test['B'] = df_test['B'].map(lambda x: np.nan if ((type(x) == bool) & (x == False)) else x)