将大写应用于pandas数据帧中的列

Gil*_*yan 25 python python-2.7 pandas

我在将大写字母应用于DataFrame中的列时遇到了问题.

数据帧是df.

1/2 ID 是需要应用大写的列头.

问题是这些值由三个字母和三个数字组成.例如rrr123,其中一个值.

df['1/2 ID'] = map(str.upper, df['1/2 ID'])
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode' error.

如何将大写应用于DataFrame列中的前三个字母df

EdC*_*ica 58

如果您的熊猫版本是最新版本,那么您可以使用矢量化字符串方法upper:

df['1/2 ID'] = df['1/2 ID'].str.upper()
Run Code Online (Sandbox Code Playgroud)

此方法无法正常工作,因此必须返回结果.

  • @iratzhash你不能分配回来`df ['1/2 ID'] = df ['1/2 ID'].str.upper()` (2认同)

Di *_*Zou 22

这应该工作:

df['1/2 ID'] = map(lambda x: str(x).upper(), df['1/2 ID'])
Run Code Online (Sandbox Code Playgroud)

  • 好的,所以你有一些不是字符串的值.将`x.upper()`更改为`str(x).upper()`或`unicode(x).upper()`. (3认同)

bak*_*kal 7

str.upper() 想要一个普通的Python 2字符串

unicode.upper() 会想要unicode而不是字符串(或者你得到TypeError:描述符'upper'需要'unicode'对象但收到'str')

因此,我建议使用鸭子打字并调用.upper()每个元素,例如

df['1/2 ID'].apply(lambda x: x.upper(), inplace=True)
Run Code Online (Sandbox Code Playgroud)

  • 在 panads 的 v0.23 中,`apply` 不再有 `inplace` 参数。因此,我们似乎也需要使用此解决方案重新分配列。 (2认同)