web-dev-qa-db-ja.com

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

それで、私は空のパンダDataFrameを初期化しました、そしてこのDataFrameの中で行としてリスト(またはシリーズ)を繰り返し追加したいです。これを行う最良の方法は何ですか?

66
Wes Field

パンダの外側ですべての追加を行う方が簡単な場合があります。その場合は、ワンショットで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
86
Mike Chirico

これは単純で愚かな解決策です。

>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
53
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
42

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

>>> 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

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

31
Alex Woolford

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
22
Jay Marm

これは、すでに作成されたデータフレームを指定して、リストを新しい行として追加する関数です。これにはおそらくエラーキャッチャーが投入されるはずですが、追加する内容が正確にわかっていれば問題にならないはずです。

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
jadki

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]

ignore_index=Trueを使わないと、適切なインデックスが得られません。

3
bmello

最も簡単な方法:

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

編集する

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

2
Ghanem

単に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
2
Qinsi