gpt4 book ai didi

python - 仅当列值是字符串时才将它们转换为小写

转载 作者:太空狗 更新时间:2023-10-30 00:27:24 25 4
gpt4 key购买 nike

我在将列转换为小写时遇到了真正的麻烦。它不像使用那么简单:

df['my_col'] = df['my_col'].str.lower()

因为我正在遍历大量数据帧,其中一些(但不是全部)在感兴趣的列中同时包含字符串和整数。如果像上面那样应用,这会导致 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

最佳答案

你的 lambda 函数中的测试不太正确,但你离真相不远:

df.apply(lambda x: x.str.lower() if(x.dtype == 'object') else x)

有了数据框和输出:

>>> df = pd.DataFrame(
[
{'OS': 'Microsoft Windows', 'Count': 3},
{'OS': 'Mac OS X', 'Count': 4},
{'OS': 'Linux', 'Count': 234},
{'OS': 'Dont have a preference', 'Count': 0},
{'OS': 'I prefer Windows and Unix', 'Count': 3},
{'OS': 'Unix', 'Count': 2},
{'OS': 'VMS', 'Count': 1},
{'OS': 'DOS or ZX Spectrum', 'Count': 2},
]
)
>>> df = df.apply(lambda x: x.str.lower() if x.dtype=='object' else x)
>>> print(df)
OS Count
0 microsoft windows 3
1 mac os x 4
2 linux 234
3 dont have a preference 0
4 i prefer windows and unix 3
5 unix 2
6 vms 1
7 dos or zx spectrum 2

关于python - 仅当列值是字符串时才将它们转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45815723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com