有条件地根据列子文本更改列dtype

时间:2017-10-25 00:09:07

标签: python pandas

我有以下数据:

df
A_Key  B_ID  C_Key  D_NA
123    22    343.0  23
121    23    45.4   52

df.dtypes导致以下内容:

df.dtypes

A_Key  int64
B_ID   int64
C_Key  float
D_NA   int64

如何使用" Key"有条件地更改任何列的dtypes?或" ID"到object?我的实际数据框中有超过一百列,所以我希望有一个查找方法。

我当前的方法使用以下代码,但显然它不是pythonic并且需要单独的硬编码:

for col in ['A_Key',
            'B_ID',
            'C_Key']:
    df[col] = df[col].astype('object')

我的df.dtypes输出应显示如下:

df.dtypes

A_Key  object
B_ID   object
C_Key  object
D_NA   int64

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这应该有效:

for col in df.columns:
    if 'KEY' in col or 'ID' in col:
        df[col] = df[col].astype('object')

答案 1 :(得分:1)

尝试

cols = df.columns[df.columns.str.contains('Key|ID')]
df[cols] = df[cols].astype('O')

print(df.dtypes)

A_Key    object
B_ID     object
C_Key    object
D_NA      int64

答案 2 :(得分:1)

使用不区分大小写的正则表达式与str.contains匹配:

m = df.columns.str.contains('(?i)key|id')
df.iloc[:, m] = df.iloc[:, m].astype(object)

df.dtypes

A_Key    object
B_ID     object
C_Key    object
D_NA      int64
dtype: object