【问题标题】:Applying string functions to elements that can be NaN将字符串函数应用于可以是 NaN 的元素
【发布时间】:2016-02-02 23:55:49
【问题描述】:

我有一个 Pandas DataFrame,其中包含人类编写的分类数据。让我们这样说:

>>> df = pd.DataFrame({'name': ["A", " A", "A ", "b", "B"]})
  name
0    A
1    A
2   A
3    b
4    B

我想通过去除空格并将它们大写来规范化这些值。这很好用:

>>> df.apply(lambda x: x['name'].upper().strip(), axis=1)
0    A
1    A
2    A
3    B
4    B

我遇到的问题是我还有一些 nan 值,我实际上希望这些值在此转换后保持为 nans。但如果我有这个:

>>> df2 = pd.DataFrame({'name': ["A", " A", "A ", "b", "B", np.nan]})
>>> df2.apply(lambda x: x['name'].upper().strip(), axis=1)
("'float' object has no attribute 'upper'", u'occurred at index 5')

我想要的是这个:

0    A
1    A
2    A
3    B
4    B
5   NaN

我明白为什么会发生这种情况(nan 是浮点数,而其他是字符串),但我找不到写这个的优雅方式..

有什么想法吗?

【问题讨论】:

    标签: python string pandas


    【解决方案1】:

    您可以使用矢量化的str 运算符:

    >>> df2.name.str.strip().str.upper()
    0      A
    1      A
    2      A
    3      B
    4      B
    5    NaN
    Name: name, dtype: object
    

    【讨论】:

    【解决方案2】:

    你可以在你的 lambda 函数中有一个 if 语句来确保它是一个字符串:

    >>> lambda x: x['name'].upper().strip() if isinstance(x, str) else x
    

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多