Abd*_*man 6 python dataframe pandas
我正在使用 Pandas 处理数据框,如果另一个列值不为空,我必须在其中替换列。
我的数据框是这样的:
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0-50 StoreSale Clothes 8-Apr above 100 FatimaStore Shoes
0-50 StoreSale Clothes 8-Apr 0-50 DiscountWorld Clothes
51-100 CleanShop Clothes 4-Dec 51-100 BetterUncle Shoes
Run Code Online (Sandbox Code Playgroud)
所以,我想v_5用pfvwhere pfvis not null替换,我该如何实现呢?
您应该考虑使用 numpy where函数,它比所有 apply 方法运行得更快。
哪里基本上是 if else 函数的向量。第一个条目是一个带有条件的向量,第二个是真值,第三个是假值。这是它的外观:
import numpy as np
df['v_5'] = np.where(~df['pfv'].isnull(),df['pfv'],df['v_5']))
Run Code Online (Sandbox Code Playgroud)
祝你好运
因为缺失值是字符串null,所以使用:
df.loc[df['pfv'].ne('null'), 'v5'] = df["pfv"]
print (df)
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0 0-50 StoreSale Clothes 8-Apr above 100 null Shoes
1 0-50 DiscountWorld Clothes 8-Apr 0-50 DiscountWorld Clothes
2 51-100 BetterUncle Clothes 4-Dec 51-100 BetterUncle Shoes
Run Code Online (Sandbox Code Playgroud)
如果缺失值是NaN或Nones (不是字符串),请使用Series.fillna:
df['v5'] = df['pfv'].fillna(df['v5'])
print (df)
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0 0-50 StoreSale Clothes 8-Apr above 100 NaN Shoes
1 0-50 DiscountWorld Clothes 8-Apr 0-50 DiscountWorld Clothes
2 51-100 BetterUncle Clothes 4-Dec 51-100 BetterUncle Shoes
Run Code Online (Sandbox Code Playgroud)
您可以使用和中的apply方法:pandasnumpy
df['v_5'] = df.apply(lambda row: row['pfv'] if row['pfv']==np.NaN else row['v_5'], axis=1)
Run Code Online (Sandbox Code Playgroud)
或没有 numpy :
df['v_5'] = df.apply(lambda row: row['pfv'] if pd.isnull(row['pfv']) else row['v_5'], axis=1)
Run Code Online (Sandbox Code Playgroud)