【Pandas】行データを追加する際に出るエラー「IndexError: iloc cannot enlarge its target object」の対処法[Python]

  • URLをコピーしました!

Pandas

前回、NumPyでマスクした配列を扱うmaモジュールを紹介しました。

今回はPandasでデータを追加する際に出るエラー「iloc cannot enlarge its target object」の対処法を紹介します。

それでは始めていきましょう。

Pandasに行のデータを追加

Pandasで列のデータを追加する場合、「df[列名] = データ」で新たな列のデータを追加することができます。

import pandas as pd

df = pd.DataFrame(columns=["A", "B", "C"])

df["D"] = [1, 2, 3]

print(df)

実行結果
     A    B    C  D
0  NaN  NaN  NaN  1
1  NaN  NaN  NaN  2
2  NaN  NaN  NaN  3

しかしながら行のデータを追加することはなかなか一筋縄ではいきません。

例えば「df.iloc[行のインデックス]=データ」とすると「IndexError: iloc cannot enlarge its target object」というエラーが出てしまいます。

また前にデータフレームの行方向にデータを追加する方法を紹介しました。

ちなみにその方法を今回のケースで試してみるとこんな感じになります。

import pandas as pd
import numpy as np

df1 = pd.DataFrame(columns=["A", "B", "C"])

df2 = pd.DataFrame([[1, 2, 3]], columns=["A", "B", "C"])

df = pd.concat([df1, df2])

print(df)

実行結果
   A  B  C
0  1  2  3

これはこれでいいのですが、やはりデータを一度データフレームに変換する必要があることから少し手間がかかってしまいます。

今回は最初にデータの領域を確保する方法を紹介します。

最初にデータの領域を確保

先ほどの「pd.concat」を使う場合はデータの形状が不明な場合に有用ですが、最初からデータの量がわかっている時はその領域を確保してしまうのが有用です。

つまり最初に「np.zeros([行数, 列数])」を使って、「0」の配列をもつデータフレームを作成しておきます。

そしてデータを追加したい場所に対して、データを書き換えます。

import pandas as pd
import numpy as np

data = np.zeros([5, 3])

df = pd.DataFrame(data, columns=["A", "B", "C"])

print(data)

df.iloc[0] = [1, 2, 3]

print(df)

実行結果
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
     A    B    C
0  1.0  2.0  3.0
1  0.0  0.0  0.0
2  0.0  0.0  0.0
3  0.0  0.0  0.0
4  0.0  0.0  0.0

この方法はあるデータフレームのデータを処理をして他のデータフレームに移し替えるといった際にも有用です。

import pandas as pd

data = {"A":[1, 2, 3, 4, 5],
        "B":[2, 4, 6, 8, 10],
        "C":[3, 6, 9, 12, 15]}

df = pd.DataFrame(data)

df_new = pd.DataFrame(np.zeros(df.shape), columns=["A", "B", "C"])

for row in range(len(df.index)):
    df_new.iloc[row] = df.iloc[row] + 100

print(df_new)

実行結果
       A      B      C
0  101.0  102.0  103.0
1  102.0  104.0  106.0
2  103.0  106.0  109.0
3  104.0  108.0  112.0
4  105.0  110.0  115.0

次回はPandasで累積和と累積積を求める方法、さらに累積平均値を求める方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする