我如何创建一个空DataFrame,然后添加行,一个接一个?

我创建了一个空DataFrame:

df = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))

然后我可以在最后添加一个新行,并填充一个字段:

df = df._set_value(index=len(df), col='qty1', value=10.0)

它一次只适用于一个领域。向df中添加新行有什么更好的方法?


当前回答

mycolumns = ['A', 'B']
df = pd.DataFrame(columns=mycolumns)
rows = [[1,2],[3,4],[5,6]]
for row in rows:
    df.loc[len(df)] = row

其他回答

你只需要loc[df]。形状[0]]或loc[len(df)]


# Assuming your df has 4 columns (str, int, str, bool)
df.loc[df.shape[0]] = ['col1Value', 100, 'col3Value', False] 

or

df.loc[len(df)] = ['col1Value', 100, 'col3Value', False] 

下面是在Pandas数据框架中添加/追加一行的方法:

def add_row(df, row):
    df.loc[-1] = row
    df.index = df.index + 1
    return df.sort_index()

add_row(df, [1,2,3])

它可以用于在空的或填充的Pandas数据框架中插入/追加一行。

我想出了一个简单而美好的方法:

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

请注意评论中提到的性能警告。

我们经常看到结构df。loc[下标]=…分配给一个数据帧行。Mikhail_Sam发布了包含这个构造以及使用dict并最终创建DataFrame的方法的基准测试。他发现后者是目前为止最快的。

但是如果我们替换df3。loc[i] =…(与预分配的DataFrame)在他的代码df3。值[i] =…时,结果会发生显著变化,因为该方法的执行与使用dict的方法类似。所以我们应该经常使用df。考虑[下标]=…但是请注意,.values有一个从零开始的下标,这可能与DataFrame.index不同。

可以使用ignore_index选项将单行追加为字典。

>>> f = pandas.DataFrame(data = {'Animal':['cow','horse'], 'Color':['blue', 'red']})
>>> f
  Animal Color
0    cow  blue
1  horse   red
>>> f.append({'Animal':'mouse', 'Color':'black'}, ignore_index=True)
  Animal  Color
0    cow   blue
1  horse    red
2  mouse  black