仅对 Pandas 的字符串列应用转换,忽略数字数据

问题描述 投票:0回答:3

所以,我有一个相当大的数据框,有 85 列和近 90,000 行,我想在所有数据框中使用 str.lower() 。但是,有几列包含数字数据。有没有简单的解决方案?

> df

    A   B   C
0   10  John    Dog
1   12  Jack    Cat
2   54  Mary    Monkey
3   23  Bob     Horse

然后,在使用 df.applymap(str.lower) 之类的东西后,我会得到:

> df

    A   B   C
0   10  john    dog
1   12  jack    cat
2   54  mary    monkey
3   23  bob     horse

目前显示此错误消息:

TypeError: descriptor 'lower' requires a 'str' object but received a 'int'
python pandas dataframe
3个回答
7
投票

从 pandas 1.X 开始,您可以使用

select_dtypes("string")
:

高效地选择仅包含字符串的列
string_dtypes = df.convert_dtypes().select_dtypes("string")
df[string_dtypes.columns] = string_dtypes.apply(lambda x: x.str.lower())

df
    A     B       C
0  10  john     dog
1  12  jack     cat
2  54  mary  monkey
3  23   bob   horse

df.dtypes

A     int64
B    string
C    string
dtype: object

这可以避免对非字符串数据进行操作。


0
投票

当然,首先使用

select_dtypes("object")
选择你的 str 列:

df[df.select_dtypes("object").columns].applymap(str.lower)

0
投票

df.apply(lambda x:[x.str.lower() if x.dtypes==object else x])

© www.soinside.com 2019 - 2024. All rights reserved.