Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果另一列在DataFrame中不为null,则用另一列替换该列_Python_Pandas_Dataframe - Fatal编程技术网

Python 如果另一列在DataFrame中不为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

我正在使用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     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
您可以使用from
pandas
替换为传递序列中的非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'])