我有一个数据框如下:
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')
好像没有给我带来麻烦。非常感谢帮助。非常感谢。
答案 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)
在这种情况下,您可以使用try
和except
。
>>> 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(";")