python - 将一个df的dtypes与另一个具有不同列数的dtypes匹配
问题描述
我有一个包含 3 列的数据框,如下所示:
name date result
Anya 2021-02-13 0
Frank 2021-02-14 1
另一个数据框如下所示:
name date
Anya 2021-02-13
Frank 2021-02-14
我需要将一个df的数据类型与另一个相匹配。因为我在 df_1 中有一个额外的列,所以我收到了一个错误。我的代码如下所示:
df_1.info()
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 717 non-null object
1 date 717 non-null object
2 result 717 non-null int64
df_2.info()
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 717 non-null object
1 date 717 non-null datetime64[ns]
# Match the primary df to secondary df
for x in df_1.columns:
df_2[x] = df_2[x].astype(df_1[x].dtypes.name)
我收到一个错误:KeyError: 'profitable'
这里有什么解决方法?我需要 df_2 的 dtypes 与 df_1 完全相同。谢谢!
解决方案
df1->that has 3 columns
df2->other dataframe
首先使用布尔掩码找出两个数据帧中共有的那些列:
mask=df1.columns.isin(df2.columns)
df=df1[df1.columns[mask]]
现在终于使用astype()
方法:
df2=df2.astype(df.dtypes)
或者您可以通过以下方式在 1 行中完成所有这些操作:
df2=df2.astype(df1[df1.columns[df1.columns.isin(df2.columns)]].dtypes)
推荐阅读
- python - 与 django 一起使用时,memcache 是否需要单独作为守护进程启动?
- php - 在表单提交时以编程方式创建订单 OVERIDE PRODUCT PRICE - WooCommerce
- java - 为文件大小添加小数位
- docker - docker 上的 Jenkins 不会在 8080 端口上运行
- matlab - 将矩阵提升到幂的尺寸不正确
- python - 基于列 Python Pandas 创建行
- r - 有条件地选择列表中对象的元素位置并返回带有对象元素位置的新列表
- ruby-on-rails - 如何在rails api上重置密码?[不使用设计]
- highcharts - 高亮图表中的突出显示区域
- sql - 将重复列设为 NULL