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