如何解决错误“无法对具有非np.nan值的混合类型执行就地布尔设置”

时间:2019-05-11 13:49:28

标签: python pandas numpy

当列满足特定条件时,我想用getAllPhotos() { Permissions.requestPermission( android.Manifest.permission.READ_EXTERNAL_STORAGE, "Needed for connectivity status" ) .then(() => { console.log("Permission granted!"); const dir = android.os.Environment.getExternalStoragePublicDirectory( android.os.Environment.DIRECTORY_DCIM ); const list = dir.listFiles(); console.log(list); }) .catch(() => { console.log("Permission is not granted (sadface)"); }); } 中的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 时,我想在B和C列中用df['A'] >= dt.strptime('201804', '%Y%m')填充np.nan。我想获得如下数据框。

0

我尝试了

           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) 。我认为此错误是由于A列中存在Cannot do inplace boolean setting on mixed-types with a non np.nan value而引起的。

是否还有另一种通过使用NaT方法来获取所需数据帧的方法?

1 个答案:

答案 0 :(得分:0)

我敢肯定还有一个更优雅的解决方案,但这可行:

df2 = df.copy()
df2.loc[df2.A>=datetime.strptime('201804', '%Y%m')] = 
df2[df2.A>=datetime.strptime('201804', '%Y%m')].fillna(0)

第一行代码将复制原始数据帧。第二行获取符合条件的切片,您可以在其中相应地填写NaN项目。

我希望它会有用

欢呼!