【问题标题】:pandas, apply string operation to column should be string type, but has missing values (np.nan)pandas,对列应用字符串操作应该是字符串类型,但有缺失值(np.nan)
【发布时间】:2014-07-05 10:59:40
【问题描述】:

我有一个 pandas 数据框 df,df 的“名称”列之一是一系列字符串,我使用 numpy.nan 作为缺失值。

当我尝试根据特定条件截断该列中的每个字符串时:

trunc = lambda s: s[:-10] if cond1 else s
df.names = df.names.apply(trunc)

trunc(numpy.nan) 给我一个错误。 类型 'float' 不可迭代。

完成工作最简单的方法是什么? 我能想到的一种解决方案是更健壮地编写 trunc() 函数,它可以处理 numpy.nan 作为输入。将缺失的字符串值设置为 numpy.nan 是一种好习惯吗?

谢谢

【问题讨论】:

标签: python string pandas missing-data


【解决方案1】:

df.names 是一个pd.Series,而pd.Series have string methods 可通过其str 属性访问:

df.loc[cond1, 'names'] = df.loc[cond1, 'names'].str.slice(None, -10)

这个str.slice 方法智能地忽略了NaN。


例如:

In [28]: df = pd.DataFrame({'names': ['abcdefghij', np.nan, 'klmnopqrst', np.nan]})

In [29]: df
Out[29]: 
        names
0  abcdefghij
1         NaN
2  klmnopqrst
3         NaN

[4 rows x 1 columns]

In [30]: cond1 = [True, False, False, True]

In [31]: df.loc[cond1, 'names'] = df.loc[cond1, 'names'].str.slice(None, -10)

In [32]: df
Out[32]: 
        names
0            
1         NaN
2  klmnopqrst
3         NaN

[4 rows x 1 columns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 2016-06-30
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多