修正方法: オブジェクト列と int64 列をマージしようとしています


pandas の使用時に発生する可能性のあるエラーは次のとおりです。

 ValueError : You are trying to merge on int64 and object columns.
            If you wish to proceed you should use pd.concat

このエラーは、2 つのパンダ データフレームをマージしようとしたが、マージ対象の列が一方のデータフレームではオブジェクトであり、もう一方のデータフレームでは整数である場合に発生します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次の 2 つのパンダ DataFrame を作成するとします。

 import pandas as pd

#createDataFrame
df1 = pd. DataFrame ({' year ': [2015, 2016, 2017, 2018, 2019, 2020, 2021],
                    ' sales ': [500, 534, 564, 671, 700, 840, 810]})

df2 = pd. DataFrame ({' year ': ['2015', '2016', '2017', '2018', '2019', '2020', '2021'],
                    ' refunds ': [31, 36, 40, 40, 43, 70, 62]})

#view DataFrames
print (df1)

   year sales
0 2015 500
1 2016 534
2 2017 564
3 2018 671
4 2019 700
5,2020 840
6 2021 810

print (df2)

   year refunds
0 2015 31
1 2016 36
2 2017 40
3 2018 40
4 2019 43
5 2020 70
6 2021 62

ここで、2 つの DataFrame をマージしようとするとします。

 #attempt to merge two DataFrames
big_df = df1. merge (df2, on=' year ', how=' left ')

ValueError : You are trying to merge on int64 and object columns.
            If you wish to proceed you should use pd.concat

最初の DataFrame のyear変数は整数ですが、2 番目の DataFrame のyear変数はオブジェクトであるため、 ValueError が返されます。

エラーを修正する方法

このエラーを修正する最も簡単な方法は、2 番目の DataFrame のyear変数を整数に変換してからマージすることです。

次の構文は、これを行う方法を示しています。

 #convert year variable in df2 to integer
df2[' year ']=df2[' year ']. astype (int)

#merge two DataFrames
big_df = df1. merge (df2, on=' year ', how=' left ')

#view merged DataFrame
big_df

	year sales refunds
0 2015 500 31
1 2016 534 36
2 2017 564 40
3 2018 671 40
4 2019 700 43
5 2020 840 70
6 2021 810 62

ValueErrorを受け取らず、2 つの DataFrame を 1 つに正常にマージできていることに注意してください。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

修正方法: 列が重なっていますが、サフィックスが指定されていません
修正方法: オブジェクト「numpy.ndarray」には「append」属性がありません
修正方法: すべてのスカラー値を使用する場合は、インデックスを渡す必要があります。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です