リストまたはシリーズをパンダのDataFrameに行として追加しますか?


回答:


132

パンダの外側ですべての追加を行う方が簡単な場合もあります。その場合は、DataFrameを一度に作成するだけです。

>>> import pandas as pd
>>> simple_list=[['a','b']]
>>> simple_list.append(['e','f'])
>>> df=pd.DataFrame(simple_list,columns=['col1','col2'])
   col1 col2
0    a    b
1    e    f

22
変数に名前を付けるのは悪い習慣ですlistlistコンストラクタを上書きしました。
Jason Strimpel

1
この質問は、すべての行が事前にわかっているわけではないことを暗示しているようです。
DISC-O

103
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]

8
これは、の末尾に追加する場合に最も簡単ですdf
シド

2
これはまさに私が欲しかったものなので、シンプルでありながら効果的です!
MSalty

3
なぜこれが選択された答えではないのですか?
Lucas Azevedo

これは、一般的にOKですが、あなたは0で開始することを単調に増加するインデックスを持っている場合にのみ動作します
dreab

59

シンプルでおかしなソリューションは次のとおりです。

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)

25
これはリストではなく、dictを追加することに注意してください
anthnyprschka

36

このようなことをしてもらえますか?

>>> import pandas as pd
>>> df = pd.DataFrame(columns=['col1', 'col2'])
>>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True)
>>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True) 
>>> df
  col1 col2
0    a    b
1    d    e

誰かがよりエレガントな解決策を持っていますか?


1
これはより単純でばかげたソリューションです: `` `import pandas as pd df = pd.DataFrame()df = df.append({'foo':1、 'bar':2}、ignore_index = True)#この追加に注意してくださいその場では起こりません。`` `
Jaidev Deshpande 2014年

27

Mike Chiricoの回答に従います...データフレームが既に入力されているにリストを追加したい場合...

>>> list = [['f','g']]
>>> df = df.append(pd.DataFrame(list, columns=['col1','col2']),ignore_index=True)
>>> df
  col1 col2
0    a    b
1    d    e
2    f    g

コピーを作成しますか?インプレースで追加することは可能ですか?
lucid_dreamer

4

Seriesを追加し、DataFrameの列としてSeriesのインデックスを使用する場合は、大括弧の間にSeriesを追加するだけです。

In [1]: import pandas as pd

In [2]: df = pd.DataFrame()

In [3]: row=pd.Series([1,2,3],["A","B","C"])

In [4]: row
Out[4]: 
A    1
B    2
C    3
dtype: int64

In [5]: df.append([row],ignore_index=True)
Out[5]: 
   A  B  C
0  1  2  3

[1 rows x 3 columns]

Whitoutはignore_index=True適切なインデックスを取得しません。


4

これは、すでに作成されたデータフレームを前提として、リストを新しい行として追加する関数です。これにはおそらくエラーキャッチャーがスローされているはずですが、何を追加するかが正確にわかっている場合は問題になりません。

import pandas as pd
import numpy as np

def addRow(df,ls):
    """
    Given a dataframe and a list, append the list as a new row to the dataframe.

    :param df: <DataFrame> The original dataframe
    :param ls: <list> The new row to be added
    :return: <DataFrame> The dataframe with the newly appended row
    """

    numEl = len(ls)

    newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns))

    df = df.append(newRow, ignore_index=True)

    return df

3

追加機能内でリストをデータフレームに変換することは、ループで適用された場合にも機能します。

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))

2

単にlocを使用します。

>>> df
     A  B  C
one  1  2  3
>>> df.loc["two"] = [4,5,6]
>>> df
     A  B  C
one  1  2  3
two  4  5  6


0

最も簡単な方法:

my_list = [1,2,3,4,5]
df['new_column'] = pd.Series(my_list).values

編集:

新しいリストの長さは、対応するデータフレームと同じであることを忘れないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.