Python 如果另一列在DataFrame中不为null,则用另一列替换该列
我正在使用Pandas处理一个数据帧,在这个数据帧中,如果另一个column值不为null,我必须替换一个列 我的数据帧类似于:Python 如果另一列在DataFrame中不为null,则用另一列替换该列,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用Pandas处理一个数据帧,在这个数据帧中,如果另一个column值不为null,我必须替换一个列 我的数据帧类似于: 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 Clot
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
因此,我想用pfv
替换v_5
,其中pfv
不为空,我如何实现这一点?您可以使用pandas
和numpy
中的方法:
df['v_5'] = df.apply(lambda row: row['pfv'] if row['pfv']==np.NaN else row['v_5'], axis=1)
或者没有numpy:
df['v_5'] = df.apply(lambda row: row['pfv'] if pd.isnull(row['pfv']) else row['v_5'], axis=1)
由于缺少的值是字符串
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
如果缺少的值为NaN
或None
s(非字符串),请使用:
我的解决方案与耶斯雷尔的相同,但还有一个步骤,是基于我用空问题写的一篇文章。 我为没有值的pfv又添加了一行
data = [['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'],
['0-50','StoreSale','Clothes','12-Apr','above 100','','Clothes']]
第一步是处理空值df'是数据帧
df = df.replace('', np.nan)
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0 0-50 StoreSale Clothes 8-Apr above 100 FatimaStore Shoes
1 0-50 StoreSale Clothes 8-Apr 0-50 DiscountWorld Clothes
2 51-100 CleanShop Clothes 4-Dec 51-100 BetterUncle Shoes
3 0-50 StoreSale Clothes 12-Apr above 100 NaN Clothes
现在,让我们更新v5列。
命令说我们将替换pfv的v5,但如果pfv为NaN,我们将替换为v5的当前值
df['v5'] = df['pfv'].fillna(df['v5'])
print(df)
v_4 v5 s_5 vt_5 ex_5 pfv pfv_cat
0 0-50 FatimaStore Clothes 8-Apr above 100 FatimaStore Shoes
1 0-50 DiscountWorld Clothes 8-Apr 0-50 DiscountWorld Clothes
2 51-100 BetterUncle Clothes 4-Dec 51-100 BetterUncle Shoes
3 0-50 StoreSale Clothes 12-Apr above 100 NaN Clothes
您可以使用frompandas
替换为传递序列中的非NA值
因此,首先需要将“null”替换为NaN
例如:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['a', 'b', 'c'],
'B': ['x', 'null', 'z']})
# Replace null with nan
df.loc[:,'B'] = df.loc[:,'B'].replace('null', np.nan)
# Update column, only if other column is non-nan (inplace)
df.A.update(df.B)
或者如果您不想用NaN更改null
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['a', 'b', 'c'],
'B': ['x', 'null', 'z']})
# Replace null with nan
temp = df.loc[:,'B'].replace('null', np.nan)
# Update column, only if other column is non-nan (inplace)
df.A.update(temp)
你应该考虑使用NoMPy函数,它运行得更快,所有的应用方法都是.< /P> 其中基本上是向量的if-else函数。第一个条目是带有条件的向量,第二个条目是值(如果为真),第三个条目是值(如果为假)。下面是它的外观:
import numpy as np
df['v_5'] = np.where(~df['pfv'].isnull(),df['pfv'],df['v_5']))
祝你在游戏后期好运,但是如果真的
为null(不是'null'
字符串),你也可以使用
df['v_5'] = df['pfv'].combine_first(df['v_5'])
这相当于SQL中的COALESCE()
。你可以试试:)DF[numpy.isnan(DF[“pfv”])][v_5”]=DF[“pfv”]
你认为缺少的值是空字符串吗?我认为这些是空字符串。不是NaN
或None
s?所以DF.loc[DF['pfv'].ne('null'),'v5']=DF[“pfv”]>,你怎么知道信息缺失值是空字符串?我不知道。我写了一篇文章,在pfv中留下了一个空白。当我尝试fillna时,它不起作用,因为没有可填充的NaN。我把答案贴了出来以防万一。
df['v_5'] = df['pfv'].combine_first(df['v_5'])