Python 仅对带熊猫的字符串列应用转换,忽略数字数据

Python 仅对带熊猫的字符串列应用转换,忽略数字数据,python,pandas,dataframe,Python,Pandas,Dataframe,所以,我有一个相当大的数据框,有85列,近90000行,我想在所有这些数据框中使用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

所以,我有一个相当大的数据框,有85列,近90000行,我想在所有这些数据框中使用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'

当然,首先使用
选择数据类型(“对象”)
选择str列:

df[df.select\u数据类型(“对象”).columns].applymap(str.lower)

从pandas 1.X中,您可以使用以下方法有效地选择仅字符串的列:


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

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

为了提高效率,我倾向于只使用1行来选择数据类型,例如:
df.convert\u dtypes().head(1)。选择数据类型(“字符串”)
@Erfan Yes,如果您只使用
select\u dtypes
来选择列名,然后在df[selected\u types.columns]
上调用
apply
,这就行了。在本例中,我在选定的类型上应用str.lower
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