0

问题

在将空值替换为布尔值的过程中,我们在列中找到空值fireplace_count

如果fireplaceflagvalue 是Falsevaluefireplace_count null应该替换为0

为熊猫而写

df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
4

3 回答 3

1

我建议使用 df.fillna() 并将列名放在方法中以定位它,例如:

df['<column_name>']=df.<columnname>.fillna(<new_value>)

您可以将要更改空值的新值放入括号中。在您的情况下,这是“0”。让我们也简化问题,因为似乎None值的条件是是否有False标志。

我将使用您之前发送给我的系列,稍作改动。

import cudf
df = cudf.DataFrame({'basement_flag': [1, 1, 1, 0],
                     'basementsqft': [400,750,500,0],
                     'fireplace_count': [2, None, None, 1], #<-- added a None to illustrate the targeted nature of the solution
                     'fireplaceflag': [10, None, None, 8]})
print(df)
df['fireplace_count']=df.fireplace_count.fillna(0) #<-- This is the solution.  It changes only the values in the column of interest, which is what you explained that you needed
print(df)

输出将是:

   basement_flag  basementsqft  fireplace_count  fireplaceflag
0              1           400                2             10
1              1           750                                
2              1           500                                
3              0             0                1              8
   basement_flag  basementsqft  fireplace_count  fireplaceflag
0              1           400                2             10
1              1           750                0               
2              1           500                0               
3              0             0                1              8

还有...

df['fireplace_count'] = df['fireplace_count'].fillna(0)
df['fireplaceflag']= df['fireplaceflag'].fillna(-1)
df['fireplaceflag'] = df['fireplaceflag'].masked_assign(1, df['fireplace_count'] > 0)

根据我认为您的问题,这应该适用于任何奇怪的情况(感谢 Roy F @ NVIDIA)

让我知道这是否适合您,或者您是否需要更多帮助!

于 2019-07-22T22:07:35.577 回答
0

我们正在尝试做的事情

在列中的值所在的行中fireplaceflagFalse即没有壁炉),将列中的null值更改为fireplace_count0

最初问题的熊猫代码

df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0

翻译成cudf

df_train['fireplace_count'] = df_train['fireplace_count'].masked_assign(0, (df_train['fireplace_count'].isna() == True) & (df_train['fireplaceflag'] == False))
于 2019-07-25T01:16:26.673 回答
0

使用这个特定示例的公认答案fillna,但答案中的通用版本不适用于 cuDF 0.9 中标题中的问题。

cuDF 现在支持该__setitem__()方法。的一般场景

“在值为 in 的行中,将值column_a设置Xcolumn_bY,最好使用以下内容:

import cudf
df = cudf.DataFrame({'basement_flag': [1, 1, 1, 0],
                     'basementsqft': [400,750,500,0],
                     'fireplace_count': [2, None, None, 1], #<-- added a None to illustrate the targeted nature of the solution
                     'fireplaceflag': [10, None, None, 8]})
print(df)
​
mask = df.fireplaceflag.isnull()
df.loc[mask, 'fireplace_count'] = 0
print(df)
   basement_flag  basementsqft fireplace_count fireplaceflag
0              1           400               2            10
1              1           750            null          null
2              1           500            null          null
3              0             0               1             8
   basement_flag  basementsqft  fireplace_count fireplaceflag
0              1           400                2            10
1              1           750                0          null
2              1           500                0          null
3              0             0                1             8
于 2019-08-22T13:59:16.987 回答