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 数据类型
解决方案
用于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
PS,我已将您的列列表重命名为,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
字典来选择性地转换某些列,但返回整个 DataFrame。
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
推荐阅读
- javascript - 拖放图像和 CSS
- lua - 获取表中表的值
- git - 如何在 git commit 中打印更改的行?
- javascript - React 中的模板字符串
- angular - Angular 库编译时错误“违反不变量:没有格式路径或格式”
- javascript - 我无法从 facebook api 图形工具获取短用户令牌
- typescript - TypeScript - 限制元组泛型的类型保存映射类型
- coq - 无法找到 Coq 库:`错误:无法找到库浮点数。`
- docker - 在不是应用程序的谷歌云中运行 docker 容器
- git - Jenkins 和 gitlab 多分支 pupeline