【问题标题】:Concatenating noneType and string value columns (pandas dataframes) results in "NaN"连接 noneType 和字符串值列(熊猫数据框)导致“NaN”
【发布时间】:2020-04-23 14:31:40
【问题描述】:

我正在尝试连接两列,而第二列有几个 noneType 值。当我尝试将两列与 noneType 值连接时,结果列的结果为“NaN”。

我试图环顾四周,看看是否能找到有关此行为的问题,但找不到。

这是连接前表格的样子:

这是我修改后加入两列的代码:

new_table["name"] = new_table[0] + new_table[1]

结果如下:

为什么串联会导致“NaN”,我该如何解决?

【问题讨论】:

  • 预期输出是什么?
  • 请将代码和数据作为帖子本身的文本而不是图像共享。请参阅:meta.stackoverflow.com/q/303812/11301900。你读过 Pandas 文档吗? 我该如何修复它? 没有什么可修复的,NaN 有一个目的。说到这里,你为什么在 DataFrame 中使用None
  • 注意图像。我在这里阅读了 pandas 文档:pandas.pydata.org/pandas-docs/stable/getting_started/…,但我找不到这种行为的解释。 NaN 有一个函数,但不清楚为什么字符串对象 '+' noneType 会导致 NaN。由于结果是 NaN,而不是像求和运算所建议的那样仅来自第一列的数据,我想知道如何“修复”它。

标签: python string pandas dataframe nonetype


【解决方案1】:
df = pd.DataFrame([["K.", "Mbappe"], ["N.", np.nan]])
print (df)

输出:

    0       1  
0  K.  Mbappe  
1  N.     NaN  


df['Name'] = df[0].str.cat(df[1], na_rep='')
print(df)

输出:

    0       1      Name
0  K.  Mbappe  K.Mbappe
1  N.     NaN        N.

这与 ypnos 提出的方法相同,而是使用 Series str.cat 函数。

【讨论】:

  • 对我的回答很有帮助,因为str.cat 比普通的 str 连接更强大。
  • 谢谢@Ponx。 str.cat 更强大有什么原因吗?
【解决方案2】:

最简单的解决方法是将 None 替换为空字符串:

new_table["name"] = new_table[0] + new_table[1].fillna('')

【讨论】:

  • 谢谢,问题解决了。但是为什么 noneTypes 和 strings 之间的连接会以这种方式工作?
  • Python 不允许str 和任何其他类型(包括NoneType)之间的连接。 Pandas 捕获TypeError 并回退到NaN。你有责任告诉 Pandas 如何处理缺失值,以避免静默失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2017-02-24
  • 2018-04-26
  • 2012-08-05
相关资源
最近更新 更多