检查dataframe中每列的名称是否包含子字符串,并更改数据类型

2024-10-01 22:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个子字符串列表,我想检查数据框中的哪些列包含这些子字符串,以便更改它们的数据类型

例如,如果“Amount”是列表中的子字符串,则名称为Cred_Amount、Amount_123、Amount的列的数据类型应更改为int

lst = ["Amount", "ID"]
df = pd.DataFrame({'ID_Loan': [2199, 3994, 8499, 74889, 83479],'Loan_Amount': ['100', '122', '222', '350', '300'],'Team': ['Boston', 'Boston', 'Boston', 'Chele', 'Barse'],'CreditAmount': [89, 79, 113, 78, 84],'College': ['MIT', 'MIT', 'MIT', 'Stanford', 'Stanford'],'ID_Num': [99999, 99994, 89999, 78889, 87779]})

df
   ID_Loan Loan_Amount    Team  CreditAmount   College  ID_Num
0     2199         100  Boston            89       MIT   99999
1     3994         122  Boston            79       MIT   99994
2     8499         222  Boston           113       MIT   89999
3    74889         350   Chele            78  Stanford   78889
4    83479         300   Barse            84  Stanford   87779

我希望将第1、2、4和6列更改为int数据类型


Tags: 字符串iddf列表mitbostonamountteam
1条回答
网友
1楼 · 发布于 2024-10-01 22:34:58

使用filter选择并使用astype转换:

u = df.filter(regex='|'.join(lst))
df[u.columns] = u.astype(int)

df.dtypes

ID_Loan          int64
Loan_Amount      int64
Team            object
CreditAmount     int64
College         object
ID_Num           int64
dtype: object

另外,我已经将您的列列表重命名为lst,因为使用list会隐藏内置项,这是一种不好的做法


另一个选项是使用str.contains获得带有loc的掩码和切片:

m =  df.columns.str.contains('|'.join(lst))
df.loc[:, m] = df.loc[:,m].astype(int)

df.dtypes

ID_Loan          int64
Loan_Amount      int64
Team            object
CreditAmount     int64
College         object
ID_Num           int64
dtype: object

最后,还可以将astype与字典一起使用,有选择地转换某些列,但返回整个数据帧

df = df.astype(
    dict.fromkeys(df.columns[df.columns.str.contains('|'.join(lst))], 'int'))

df.dtypes

ID_Loan          int64
Loan_Amount      int64
Team            object
CreditAmount     int64
College         object
ID_Num           int64
dtype: object

相关问题 更多 >

    热门问题