use*_*984 7 python string pandas
我有一个Pandas DataFrame,其中包含由人类编写的分类数据.我们这样说:
>>> df = pd.DataFrame({'name': ["A", " A", "A ", "b", "B"]})
name
0 A
1 A
2 A
3 b
4 B
Run Code Online (Sandbox Code Playgroud)
我想通过剥离空格和大写它们来规范化这些值.这非常有效:
>>> df.apply(lambda x: x['name'].upper().strip(), axis=1)
0 A
1 A
2 A
3 B
4 B
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我也有一些nan价值观,而且我有效地希望这些价值nan在这次转型之后仍然存在.但如果我有这个:
>>> 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')
Run Code Online (Sandbox Code Playgroud)
我想要的是这个:
0 A
1 A
2 A
3 B
4 B
5 NaN
Run Code Online (Sandbox Code Playgroud)
我明白为什么会发生这种情况(nan是浮动的,而其他的是字符串),但我找不到一种优雅的写作方式.
有什么想法吗?
您可以使用矢量化str运算符:
>>> df2.name.str.strip().str.upper()
0 A
1 A
2 A
3 B
4 B
5 NaN
Name: name, dtype: object
Run Code Online (Sandbox Code Playgroud)