为两个Pandas数据框设置等效的dtypes

时间:2019-02-11 08:10:46

标签: pandas

我有两个具有完全相同的列名的数据帧,但是其中一列在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')}

谢谢!

1 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用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]