将列表或系列作为一行添加到pandas DataFrame中?

时间:2014-10-11 00:53:19

标签: python pandas append dataframe

所以我初始化了一个空的pandas DataFrame,我想在这个DataFrame中迭代地将列表(或Series)作为行附加。这样做的最佳方式是什么?

14 个答案:

答案 0 :(得分:84)

有时候在熊猫之外做所有附加操作会更容易,然后,只需一次创建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

答案 1 :(得分:53)

这是一个简单而愚蠢的解决方案:

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

答案 2 :(得分:42)

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

答案 3 :(得分:31)

你可以这样做吗?

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

有没有人有更优雅的解决方案?

答案 4 :(得分:22)

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

答案 5 :(得分:6)

在 Python 中有多种方法可以将列表附加到 Pandas 数据帧。让我们考虑以下数据框和列表:

import pandas as pd
# Dataframe
df = pd.DataFrame([[1, 2], [3, 4]], columns = ["col1", "col2"])
# List to append
list = [5, 6]

选项 1:在数据帧末尾附加列表 pandas.DataFrame.loc

df.loc[len(df)] = list

选项 2: 将列表转换为数据框并附加 pandas.DataFrame.append()

df = df.append(pd.DataFrame([list], columns=df.columns), ignore_index=True)

选项 3: 将列表转换为系列并附加 pandas.DataFrame.append()

df = df.append(pd.Series(list, index = df.columns), ignore_index=True)

上述每个选项都应该输出如下内容:

>>> print (df)
   col1  col2
0     1     2
1     3     4
2     5     6

参考:How to append a list as a row to a Pandas DataFrame in Python?

答案 6 :(得分:3)

如果您想添加一个系列并使用系列' index作为DataFrame的列,您只需要在括号中附加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你不合适的索引进行了。

答案 7 :(得分:3)

在给定已创建的数据框的情况下,此函数将列表添加为新行。这可能应该引发错误捕获器,但是如果您确切知道要添加的内容,那应该不是问题。

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

答案 8 :(得分: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

答案 9 :(得分:2)

最简单的方法:

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

编辑:

别忘了新列表的长度应与相应数据框的长度相同。

答案 10 :(得分:2)

如此处所述-https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python,您需要先将列表转换为序列,然后将序列附加到数据框。

df = pd.DataFrame([[1, 2], [3, 4]], columns = ["a", "b"])
to_append = [5, 6]
a_series = pd.Series(to_append, index = df.columns)
df = df.append(a_series, ignore_index=True)

答案 11 :(得分:1)

考虑一个 N x 2 维的数组 A。要再添加一行,请使用以下命令。

A.loc[A.shape[0]] = [3,4]

答案 12 :(得分:0)

将列表转换为附加函数中的数据框也有效,即使在循环中应用

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

答案 13 :(得分:0)

概述:您可以使用loc将列表追加到现有数据框

  win_results_df=pd.DataFrame(columns=['GameId',
  'Team',
  'TeamOpponent',
  'HomeScore',
  'VisitorScore','Target'])

for key,item in teams.items():
    game_filter=(games_df['homeDisplayName']==key)
    win_df=games_df[game_filter]['HomeScore']>games_df[game_filter]['VisitorScore']
    for oppKey,teamOpponent in games_df[game_filter][win_df].iterrows():
       df_length = len(win_results_df)
       win_results_df.loc[df_length] = [teamOpponent['gameId'],key,teamOpponent['visitorDisplayName'],teamOpponent['HomeScore'],teamOpponent['VisitorScore'],True]