如何在pandas数据帧上进行字符串操作

时间:2016-10-29 03:22:21

标签: python pandas

我有一个数据框如下:

df = pd.DataFrame({'a': [10, 11, None],
                   'b': ['apple;', None, 'orange;'],
                   'c': ['red', 'blue', 'green']})

我试图剥夺&#39 ;;'那些字符串。我试过了

df.select_dtypes(include=['object']).applymap(lambda x: x.strip(';'))

我收到错误消息:

AttributeError: ("'NoneType' object has no attribute 'strip'", 'occurred at   index b') 

好像没有给我带来麻烦。非常感谢帮助。非常感谢。

4 个答案:

答案 0 :(得分:2)

问题是某些值为None,您无法Non.strip()

df.select_dtypes(include=['object'])
         b      c
0   apple;    red
1     None   blue
2  orange;  green

只有当对象不是None时才能做strip,否则只返回对象:

df.select_dtypes(include=['object']).applymap(lambda x: x.strip(';') if x else x)
        b      c
0   apple    red
1    None   blue
2  orange  green

答案 1 :(得分:1)

在这种情况下,您可以使用tryexcept

>>> def am(o):
...    try:
...       return o.strip(';')
...    except AttributeError:
...       return o

然后你试过applymap

>>> df.select_dtypes(include=['object']).applymap(am)
        b      c
0   apple    red
1    None   blue
2  orange  green

答案 2 :(得分:0)

使用系列apply属性和applymap代替In [17]: df.select_dtypes(include=['object']).apply(lambda S:S.str.strip(';')) Out[17]: b c 0 apple red 1 None blue 2 orange green In [18]:

<div>

答案 3 :(得分:0)

另一种方法是迭代dtype对象的所有列,并使用处理NaN值的Series函数strip

for col in df.columns[df.dtypes == object]:
    df[col] = df[col].str.strip(";")