问题
在将空值替换为布尔值的过程中,我们在列中找到空值fireplace_count
。
如果fireplaceflag
value 是False
valuefireplace_count
null
应该替换为0
为熊猫而写
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
我建议使用 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)
让我知道这是否适合您,或者您是否需要更多帮助!
在列中的值所在的行中fireplaceflag
(False
即没有壁炉),将列中的null
值更改为fireplace_count
0
df_train.loc[(df_train.fireplace_count.isnull()) & (df_train.fireplaceflag==False),'fireplace_count'] = 0
df_train['fireplace_count'] = df_train['fireplace_count'].masked_assign(0, (df_train['fireplace_count'].isna() == True) & (df_train['fireplaceflag'] == False))
使用这个特定示例的公认答案fillna
,但答案中的通用版本不适用于 cuDF 0.9 中标题中的问题。
cuDF 现在支持该__setitem__()
方法。的一般场景
“在值为 in 的行中,将值column_a
设置X
为column_b
” Y
,最好使用以下内容:
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