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

Wes*_*eld 86 python append dataframe pandas

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

Mik*_*ico 109

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

  • 这个问题似乎暗示并非所有行都是预先知道的。 (9认同)
  • 命名变量“列表”的错误做法。您刚刚覆盖了`list`构造函数。 (8认同)
  • 这并没有回答OP的问题。 (3认同)

Ash*_*yan 65

df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
Run Code Online (Sandbox Code Playgroud)

  • 如果你想添加到`df`的末尾,这是最简单的. (8认同)
  • 这通常没问题,但仅当您有一个从 0 开始的单调递增索引时才有效。 (4认同)
  • 这正是我想要的,如此简单却有效! (2认同)
  • 为什么这不是所选答案? (2认同)

Jai*_*nde 56

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

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

  • 请注意,这是附加dict而不是列表 (17认同)

Ale*_*ord 32

你能做这样的事吗?

>>> 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
Run Code Online (Sandbox Code Playgroud)

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


Jay*_*arm 24

关于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
Run Code Online (Sandbox Code Playgroud)


Fif*_*ifi 8

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

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

选项 1:将列表附加到数据帧的末尾?pandas.DataFrame.loc.

df.loc[len(df)] = list
Run Code Online (Sandbox Code Playgroud)

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

df = df.append(pd.DataFrame([list], columns=df.columns), ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

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

df = df.append(pd.Series(list, index = df.columns), ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

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

>>> print (df)
   col1  col2
0     1     2
1     3     4
2     5     6
Run Code Online (Sandbox Code Playgroud)

参考:如何将列表作为一行附加到 Python 中的 Pandas DataFrame?

  • 可用的最佳答案 (2认同)

小智 6

在 append 函数中将列表转换为数据框也有效,在循环中应用时也是如此

import pandas as pd
mylist = [1,2,3]
df = pd.DataFrame()
df = df.append(pd.DataFrame(data[mylist]))
Run Code Online (Sandbox Code Playgroud)

  • 什么是“数据[mylist]”?显然,它会抛出错误“NameError:名称'数据'未定义”。五票表明他们知道? (5认同)
  • 正确的应该是 `df = df.append(pd.DataFrame(data=[mylist]))` 。数据后面缺少“=”。 (2认同)

jad*_*dki 5

这是一个函数,给定一个已经创建的数据帧,它将添加一个列表作为一个新行。这可能应该包含错误捕获器,但是如果您确切地知道要添加的内容,那么这应该不是问题。

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
Run Code Online (Sandbox Code Playgroud)