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

我创建了一个空DataFrame:

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

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

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

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


当前回答

您可以为此连接两个数据框架。我基本上遇到了这个问题,用字符索引(不是数字)向现有的DataFrame添加新行。

因此,我在一个管道()中输入新行数据,并在一个列表中索引。

new_dict = {put input for new row here}
new_list = [put your index here]

new_df = pd.DataFrame(data=new_dict, index=new_list)

df = pd.concat([existing_df, new_df])

其他回答

您可以为此连接两个数据框架。我基本上遇到了这个问题,用字符索引(不是数字)向现有的DataFrame添加新行。

因此,我在一个管道()中输入新行数据,并在一个列表中索引。

new_dict = {put input for new row here}
new_list = [put your index here]

new_df = pd.DataFrame(data=new_dict, index=new_list)

df = pd.concat([existing_df, new_df])

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

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

你可以使用pandas.concat()。有关详细信息和示例,请参见合并、连接和连接。

例如:

def append_row(df, row):
    return pd.concat([
                df, 
                pd.DataFrame([row], columns=row.index)]
           ).reset_index(drop=True)

df = pd.DataFrame(columns=('lib', 'qty1', 'qty2'))
new_row = pd.Series({'lib':'A', 'qty1':1, 'qty2': 2})

df = append_row(df, new_row)

这将负责向空DataFrame添加一个项。问题是对于第一个索引,df.index.max() == nan:

df = pd.DataFrame(columns=['timeMS', 'accelX', 'accelY', 'accelZ', 'gyroX', 'gyroY', 'gyroZ'])

df.loc[0 if math.isnan(df.index.max()) else df.index.max() + 1] = [x for x in range(7)]

如果你有一个数据帧df,想要添加一个列表new_list作为一个新行到df,你可以简单地做:

df.loc[len(df)] = new_list

如果你想在数据帧df下添加一个新的数据帧new_df,那么你可以使用:

df.append(new_df)