【发布时间】:2025-11-24 12:10:01
【问题描述】:
我在将列转换为小写时遇到了问题。可不只是使用那么简单:
df['my_col'] = df['my_col'].str.lower()
因为我正在迭代很多数据帧,其中一些(但不是全部)在感兴趣的列中同时包含字符串和整数。如果像上面那样应用,这会导致较低的函数抛出异常:
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
我不想强制类型为字符串,而是想评估值是否为字符串,然后 - 如果是 - 将它们转换为小写,并且 - 如果它们不是字符串 - 保持原样。我认为这会起作用:
df = df.apply(lambda x: x.lower() if(isinstance(x, str)) else x)
但它不起作用......可能是因为我忽略了一些明显的东西,但我看不到它是什么!
我的数据如下所示:
OS Count
0 Microsoft Windows 3
1 Mac OS X 4
2 Linux 234
3 Don't have a preference 0
4 I prefer Windows and Unix 3
5 Unix 2
6 VMS 1
7 DOS or ZX Spectrum 2
【问题讨论】:
-
你可以通过
df['my_col'] = df['my_col'].astype(str).str.lower()强制所有内容到str,是否有理由混合dtype,因为这是非执行的 -
啊...我不确定。 astype(str) 在返回时不会将“Count”列中的所有整数都转换为字符串吗?如果是这样,那不会阻止以后的算术运算吗?我应该将其添加到原始问题中...
标签: python string pandas dataframe