如何将第二个DataFrame的列数据类型匹配为第一个的类型?
匹配DataFrame对应列的数据类型
我有两个Pandas DataFrame:
df:
| ID | country | money | code | money_add | other |
|---|---|---|---|---|---|
| 832932 | Other | NaN | 00000 | NaN | NaN |
| 217#8# | NaN | NaN | NaN | NaN | NaN |
| 1329T2 | France | 12131 | 00020 | 3452 | 123 |
| 124932 | France | NaN | 00016 | NaN | NaN |
| 194022 | France | NaN | 00000 | NaN | NaN |
df1:
| cod_t | money | money_add | other |
|---|---|---|---|
| 00000 | 4532 | 72323 | 321 |
| 00016 | 1213 | 23822 | 843 |
| 00018 | 1313 | 8393 | 183 |
| 00020 | 1813 | 27328 | 128 |
| 00030 | 8932 | 3204 | 829 |
执行以下代码检查两表对应列的数据类型是否一致:
cols = df.columns.intersection(df1.columns) print(df[cols].dtypes.eq(df1[cols].dtypes))
得到结果:
money False money_add False other False dtype: bool
现在需要将df1的对应列数据类型匹配为df的类型,具体实现方法如下:
实现方法
通过遍历两表的共同列,将df1的列转换为df对应列的数据类型即可,代码如下:
cols = df.columns.intersection(df1.columns) # 遍历共同列,批量转换数据类型 for col in cols: df1[col] = df1[col].astype(df[col].dtype) # 再次验证类型匹配情况 print(df[cols].dtypes.eq(df1[cols].dtypes))
补充说明
- 如果转换时遇到无法直接兼容的场景(比如字符串转数值时存在非数值字符),可以添加
errors参数处理,例如df1[col] = df1[col].astype(df[col].dtype, errors='ignore'),但这种方式会保留无法转换的原始值,需根据业务场景调整。 - 若df中的列是带空值的可数值类型(如
Int64),df1是普通数值类型,astype能自动完成兼容转换,无需额外处理空值问题。
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

