【问题标题】:replace df index values with values from a list but ignore empty strings用列表中的值替换 df 索引值,但忽略空字符串
【发布时间】:2016-04-29 01:34:24
【问题描述】:

我想用 DF2[some_column].values 替换 DF1.index.values 但是我只想在 DF2[some_column].value 不是 null 或空字符串时替换。

DF1.index.values

Index(['a','b','c','d']), dtype='object')

DF2[some_column].values

['base','','','net 1']

预期输出

Index(['base','b','c','net 1']), dtype='object')

我的尝试:

DF1.index = DF2[some_column].values

这是不正确的,因为它替换了所有内容,这不是我想要的,我只对非空值或空值感兴趣。

【问题讨论】:

  • DF2[some_column].replace('', DF1.index) 工作吗?
  • 感谢 EdChum,但它不会完成我的计划。

标签: python pandas indexing replace dataframe


【解决方案1】:

您可以使用where按条件从源到源选择值:

DF1.index = DF2[some_column].where(DF2[some_column]!="", DF2.index)

因此,如果DF2[some_column]!="",它将使用DF2[some_column] 值(实际上,我们在这里创建了一个用作布尔索引的系列,说明为每个原始数据选择什么数据),在另一种情况下,它将使用DF2.index 值.

由于您也不需要 nan 值,因此您需要 pd.notnull 函数。并检查这两个条件对两个系列中的值对使用“逻辑与”函数&

所以最终的代码是

DF1.index = DF2[some_column].where(
           (DF2[some_column]!="") & pd.notnull(DF2[some_column]), DF2.index)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2023-01-08
    • 2022-12-09
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    相关资源
    最近更新 更多