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

Joã*_*olo 3 python dataframe pandas

所以,我有一个非常大的数据框,有 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
Run Code Online (Sandbox Code Playgroud)

比,在使用像 df.applymap(str.lower) 这样的东西后,我会得到:

> df

    A   B   C
0   10  john    dog
1   12  jack    cat
2   54  mary    monkey
3   23  bob     horse
Run Code Online (Sandbox Code Playgroud)

目前它显示此错误消息:

TypeError: descriptor 'lower' requires a 'str' object but received a 'int'
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 5

从 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
Run Code Online (Sandbox Code Playgroud)

这避免了对非字符串数据的操作。