web-dev-qa-db-ja.com

pandasで既存のデータフレームに新しい行を追加するときにエラーが発生する

以下のデータフレームがあります。

df3=pd.DataFrame(columns=["Devices","months"])

ループ行から行の値を取得しています、print(data)

    Devices     months
1  Powerbank  Feb month

このデータ行をdf3に追加すると、エラーが発生します。

  df3.loc[len(df3)]=data

ValueError:列が一致しない行を設定できません

8
pyco

使用する

df3 = pd.concat([df3, data], axis=0)

または@Wenの使用が示唆するとおり

df3 = df3.append(data)
12
muon

https://pandas.pydata.org/pandas-docs/stable/merging.html から:

ただし、concat(したがってappend)がデータの完全なコピーを作成し、この関数を絶えず再利用するとパフォーマンスが大幅に低下することに注意してください。複数のデータセットで操作を使用する必要がある場合は、リスト内包表記を使用します。

あなたがしようとしていたように、そしてキーが列名であり、値が追加される行のデータである辞書で、locを使用する必要があります。

import pandas as pd

df3 = pd.DataFrame(columns=["Devices","months"])
new_entry = {'Devices': 'device1', 'months': 'month1'}

df3.loc[len(df3)] = new_entry
10
JoaoMVR

誰かが辞書形式の新しい行を追加しようとしている場合、以下が役立ちます。

  • 既存のデータフレーム
In [6]: df
Out[6]: 
     Devices     months
0  Powerbank  Feb month

In [7]:
  • 以下のスニペットは、既存のDataFrameに別の行を追加します。
In [7]: dictionary_row = {"Devices":"Laptop","months":"Mar month"}

In [8]: df = df.append(dictionary_row, ignore_index=True)

In [9]: df
Out[9]: 
     Devices     months
0  Powerbank  Feb month
1     Laptop  Mar month

In [10]:

お役に立てば幸いです。

0
Akshay

エラーが示唆するように、dataframeに挿入されるデータの列数はdataframeの列数と一致する必要があります

>>> df3=pd.DataFrame(columns=["Devices","months"])
>>> df3.loc[len(df3)] = ['Powerbank','Feb']
>>> df3
     Devices months
0  Powerbank    Feb
>>> data = ['powerbank','feb']
>>> df3.loc[len(df3)] = data
>>> df3
     Devices months
0  Powerbank    Feb
1  powerbank    feb