修正方法: 値の長さがインデックスの長さと一致しない


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

 ValueError: Length of values does not match length of index

このエラーは、NumPy 値の配列を pandas DataFrame の新しい列に割り当てようとしたが、配列の長さがインデックスの現在の長さと一致しない場合に発生します。

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

エラーを再現する方法

次のパンダ データフレームがあるとします。

 import pandas as pd

#define DataFrame
df = pd. DataFrame ({' points ': [25, 12, 15, 14],
                   ' assists ': [5, 7, 13, 12]})

#view DataFrame
print (df)

   assist points
0 25 5
1 12 7
2 15 13
3 14 12

ここで、「bounces」という新しい列を NumPy 配列として追加しようとするとします。

 import numpy as np

#attempt to add 'rebounds' column
df[' rebounds '] = np. array ([3, 3, 7])

ValueError : Length of values (3) does not match length of index (4)

長さ3の NumPy 配列を長さ4のインデックスを持つ DataFrame に追加しようとしているため、 ValueError を受け取ります。

エラーを修正する方法

このエラーを修正する最も簡単な方法は、NumPy 配列ではなく pandas シリーズを使用して新しい列を作成することです。

デフォルトでは、pandas シリーズの長さが DataFrame インデックスの長さに対応しない場合、NaN 値が入力されます。

 #create 'rebounds' column
df[' rebounds '] = pd. Series ([3, 3, 7])

#view updated DataFrame
df

	points assists rebounds
0 25 5 3.0
1 12 7 3.0
2 15 13 7.0
3 14 12 NaN

pandas シリーズを使用すると、「バウンス」列を正常に追加でき、欠損値は単に NaN で埋められます。

次のようにfillna()メソッドを使用すると、NaN 値を別の値 (ゼロなど) にすばやく変換できることに注意してください。

 #fill in NaN values with zero
df = df. fillna (0)

#view updated DataFrame
df

points assists rebounds
0 25 5 3.0
1 12 7 3.0
2 15 13 7.0
3 14 12 0.0

NaN 値はゼロに変換されていることに注意してください。

追加リソース

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

パンダの KeyError を修正する方法
修正方法: ValueError: float NaN を int に変換できません
修正方法: ValueError: オペランドをシェイプでブロードキャストできませんでした

コメントを追加する

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