当前位置: 首页 > 知识库问答 >
问题:

用另一个数据帧的特定列中的值替换数据帧特定列中的Nan值

袁阿苏
2023-03-14

用其他dataframe的列值替换dataframe的一列中的nan值时出现问题。下面是一个测试示例:

    Name  Age Name2
0    tom   10   tom
1   nick   15  nick
2   juli   14  juli
3    NaN   12  anne
4  error   17   neo

我想用其他dataframe中的特定值替换列名中的Nan值(如果其中有一些Nan值,则不是其他列),例如此dataframe中的Name2值:

    Name  Age Name2
4  error   17   neo

我想得到的是:

    Name  Age Name2
0    tom   10   tom
1   nick   15  nick
2   juli   14  juli
3    neo   12  anne
4  error   17   neo

这是此示例的测试代码

# initialize list of lists 
data = [['tom', 10, 'tom'], ['nick', 15, 'nick'], ['juli', 14, 'juli'], [np.nan, 12, 'anne'], ['error', 17, 'neo']] 

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Name2']) 

df1=df[df.Age==np.max(df.Age)]

然后我尝试了这三种方法,但都不起作用——我的数据帧始终保持Nan值。

df.Name.fillna(df1.Name2, inplace=True)

df.where(df.Name.isnull(), df1.Name2, axis=0)

df[df.Name.isnull()].Name=df1.Name2

你能告诉我哪里出错了吗?

共有1个答案

刘建中
2023-03-14

这里需要将一个元素系列转换为标量:

df.Name.fillna(df1.Name2.iat[0], inplace=True)
#assign output to new DataFrame, test for not missing values
df = df.where(df.Name.notna(), df1.Name2.iat[0])
#use DataFrame.loc for avoid SettingWithCopyWarning
df.loc[df.Name.isnull(), 'Name']=df1.Name2.iat[0]
print (df)
    Name  Age Name2
0    tom   10   tom
1   nick   15  nick
2   juli   14  juli
3    neo   12  anne
4  error   17   neo

详细:

print (df1.Name2)
4    neo
Name: Name2, dtype: object

print (df1.Name2.iat[0])
neo

 类似资料:
  • 我和Spark一起在Databricks上工作。编程语言是Scala。 我有两个数据帧: 主数据框:见截图:1 查找数据帧:参见屏幕截图3 我想: 查找主数据框中“年龄”=-1的所有行 我对如何做这件事伤了脑筋。我唯一想到的是将dataframe存储为DataRicks中的表,并使用SQL语句(SQL.Context.SQL…),结果非常复杂。 我想知道是否有更有效的方法。 编辑:添加可复制的示例

  • 我有一个关于熊猫以及正确索引和替换值的问题。 我有两个数据帧,df1和df2,具有相同的列(Col1、Col2、Col3和Col4)。 在df1中,我想用另一个值(比如100)替换与df2中其他列(Col1、Col2和Col3)的值匹配的行中Col4中的值。 生成的df1看起来像这样: 我试过这样的方法: 但是我得到了错误,我不确定这是否达到了我想要的。

  • 我正面临这个问题,其中我有一个数据帧,比如: 和另一个数据帧: 现在我想要的是,将df2的列插入到df1的特定位置,这样df1就变成了(实际上一个新的df也会起作用): 我现在通过创建一个新的空df来实现这一点,然后迭代这两个df的列,然后依次添加每一列。这是低效的、丑陋的,并且违背了数据流的全部目的。所以我很想知道,这个已经有方法了吗?我不确定这样的问题是否已经在这里得到了回答,但我肯定我没有找

  • 当我尝试将函数应用于Amount列时,我得到以下错误: 我试过使用Math模块中的.isnan应用函数我试过使用pandas.replace属性我试过使用pandas0.9中的.sparse data属性我也试过使用函数中的if NaN==NaN语句。我还看了这篇文章,如何在R数据帧中用0替换NA值?同时查看一些其他文章。我试过的所有方法都不起作用,或者不认识南。如有任何提示或解决方案,将不胜感激

  • 考虑以下数据帧: 使用dplyr,我如何在每一列(不隐式命名)上筛选所有大于2的值。 模拟假设的

  • 对于熊猫数据帧的特定列,该列实际上是转换成BCD的16位数据。我只想提取特定行的14-8位并转换为BCD。下面的公式适用于如下的小数据帧。 但当我申请时 对于688126行的较大数据帧,我得到一个错误,说 基数为2的int()的文本无效:“” 错误如下所示 ValueError Traceback(最近调用最后一次)在1 df.LO_TIME_0_J2_0---- C:\ProgramData\A