仅当空白,空或NaN时,才用另一列更新值

时间:2018-07-15 21:17:45

标签: python pandas dataframe nan

因此,我编写了此代码段来搜索数据帧1的整个仓库列中出现的单元格值是否出现20次或更多,如果该单元格值满足此要求,则代码将写入仓库中的单元格值列位于GeneralDescription列的单元格值上。它正在运行,但是我想添加它,因此除非它为空或NaN或”,否则它不会覆盖单元格值。

import pandas as pd 

df1.Warehouse=df1.Warehouse.str.upper() 

由于某种奇怪的原因,我无法缩进代码的下一行四个空格

df1.loc[df1.groupby('Warehouse').Warehouse.transform('count').gt(20),'GeneralDescription']=df1.Warehouse 

1 个答案:

答案 0 :(得分:2)

增强掩蔽条件,并与另一个条件一起指示列是否包含这些空值之一。

i = df1.groupby('Warehouse').Warehouse.transform('count').gt(20)
j = df1.Warehouse.isin([np.nan, 'Empty', ''])

df1.loc[i & j, 'GeneralDescription'] = df1.Warehouse 

或者,在加载数据时,指定na_values,使所有内容均变为NaN:

df = pd.read_csv(..., na_values=['Empty', '', 'NaN', 'nan'])

然后您可以这样做:

i = df1.groupby('Warehouse').Warehouse.transform('count').gt(20)
j = df1.Warehouse.isnull()
df1.loc[i & j, 'GeneralDescription'] = df1.Warehouse 

可以说是更快。