首页 > 解决方案 > 为两个 Pandas 数据帧设置等效的 dtype

问题描述

我有两个具有完全相同列名的数据框,但其中一列在dtype. 我正在寻找一种优雅的方式来使它们的类型匹配(以便连接它们)。

以下是两个数据框:

print(full_data_test.dtypes.to_dict())  
{'user_id': dtype('O'), 'days_past': dtype('int64'), 'Income_so_far': dtype('float64'), 'Deposits_so_far': dtype('int64'), 'spins_count_so_far': dtype('int64'), 'fb_invite_so_far': dtype('int64'), 'link_invite_so_far': dtype('int64'), 'video_for_coins_so_far': dtype('int64'), 'video_for_spins_so_far': dtype('int64'), 'Gifts_Spins_Sent_so_far': dtype('int64'), 'Gifts_Coins_Sent_so_far': dtype('int64'), 'Gifts_Spins_Collected_so_far': dtype('int64'), 'Gifts_Coins_Collected_so_far': dtype('int64'), 'card_collected_so_far': dtype('int64'), 'label': dtype('O'), 'os': dtype('O'), 'Media_Source_pid': dtype('O'), 'CPE_Ind': dtype('O'), 'Country': dtype('O'), 'day_of_week_Date_Installed': dtype('O')}

print(padded_train_data.dtypes.to_dict())
{'user_id': dtype('O'), 'days_past': dtype('int64'), 'Income_so_far': dtype('float64'), 'Deposits_so_far': dtype('float64'), 'spins_count_so_far': dtype('int64'), 'fb_invite_so_far': dtype('int64'), 'link_invite_so_far': dtype('int64'), 'video_for_coins_so_far': dtype('int64'), 'video_for_spins_so_far': dtype('int64'), 'Gifts_Spins_Sent_so_far': dtype('int64'), 'Gifts_Coins_Sent_so_far': dtype('int64'), 'Gifts_Spins_Collected_so_far': dtype('int64'), 'Gifts_Coins_Collected_so_far': dtype('int64'), 'card_collected_so_far': dtype('int64'), 'label': dtype('O'), 'os': dtype('O'), 'Media_Source_pid': dtype('O'), 'CPE_Ind': dtype('O'), 'Country': dtype('O'), 'day_of_week_Date_Installed': dtype('O')}

提前致谢!

标签: pandas

解决方案


最简单的解决方案是使用astype

full_data_test = full_data_test.astype(padded_train_data.dtypes)

但是一般数据并不总是可能的 - 例如,如果缺少值,则不可能将浮点数转换为整数。

您可以通过以下方式测试不匹配的列,然后进行分析:

mask = full_data_test.dtypes != padded_train_data.dtypes

full_data_test1 = full_data_test[mask]
padded_train_data1 = padded_train_data[mask]

推荐阅读