[英]TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value
[英]How to solve the error 'Cannot do inplace boolean setting on mixed-types with a non np.nan value'
我想,以填补np.nan
与0
中pd.DataFrame
当列满足特定条件。
import pandas as pd
import numpy as np
from datetime import datetime as dt
df = pd.DataFrame({'A': [np.datetime64('NaT'), dt.strptime('201803', '%Y%m'), dt.strptime('201804', '%Y%m'), np.datetime64('NaT'), dt.strptime('201806', '%Y%m')],
'B': [1, np.nan, 3, 4, np.nan],
'C': [8, 9, np.nan, 4, 1]})
A B C
0 NaT 1.0 8.0
1 2018-03-01 NaN 9.0
2 2018-04-01 3.0 NaN
3 NaT 4.0 4.0
4 2018-06-01 NaN 1.0
当df['A'] >= dt.strptime('201804', '%Y%m')
,我想在B和C列中用0
填充np.nan
。我想获得如下数据np.nan
。
A B C
0 NaT 1.0 8.0
1 2018-03-01 NaN 9.0
2 2018-04-01 3.0 0.0
3 NaT 4.0 4.0
4 2018-06-01 0.0 1.0
我试过了
m = df[df['A'] >= dt.strptime('201804', '%Y%m')][['B', 'C']].isnull()
df.mask(m, 0, inplace=True)
并得到错误Cannot do inplace boolean setting on mixed-types with a non np.nan value
。 我认为此错误是由于A列中存在NaT
而引起的...
是否有另一种方法可以通过使用mask
方法来获取所需的数据帧?
我敢肯定,有一个更优雅的解决方案,但这可行:
df2 = df.copy()
df2.loc[df2.A>=datetime.strptime('201804', '%Y%m')] =
df2[df2.A>=datetime.strptime('201804', '%Y%m')].fillna(0)
代码的第一行复制原始数据框。 第二行获取满足条件的切片,您可以在其中相应地填充NaN项目。
我希望它是有用的,
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.