将行附加到不等列的数据帧的最有效方法

时间:2019-08-23 18:56:36

标签: python pandas dataframe

我正在尝试将每次迭代的行(df_row)附加到父数据帧(df_all)。父数据帧具有所有可能的列值,并且每次迭代都会产生一行,该行具有一组唯一的列,这些列是所有可能列的子集。看起来像这样:

df_all

最初具有所有可能的列名:

Index A B C D E F G H

迭代1:

df_row1:

Index A C D E F
  ID1 1 2 3 5 1 

df_all=df_all.append(df_row1)

现在df_all如下所示:

df_all:

Index A  B  C  D  E  F  G  H 
  ID1 1  na 2  3  5  1 na na

迭代2:

df_row2

Index A B D F G H
  ID2 0 8 3 5 1 4
df_all=df_all.append(df_row2)

现在df_all如下所示:

df_all:

Index A  B  C  D  E  F  G  H 
  ID1 1  na 2  3  5  1 na na
  ID2 0  8  na 3  na 5  1  4

依此类推...

但是,我要添加的行数超过20000,并且每次添加新行都会增加添加行的时间。有没有办法在合理的时间内更有效地添加它?

2 个答案:

答案 0 :(得分:3)

请注意,您可以从Series或dict列表中构建DataFrame:

In [46]: pd.DataFrame([pd.Series({'A':1,'B':2}), pd.Series({'A':2,'C':3})])
Out[186]: 
     A    B    C
0  1.0  2.0  NaN
1  2.0  NaN  3.0

In [187]: pd.DataFrame([{'A':1,'B':2}, {'A':2,'C':3}])
Out[187]: 
   A    B    C
0  1  2.0  NaN
1  2  NaN  3.0

因此,您可以像这样构建DataFrame:

data = []
for n in range(20000):
    df_row = pd.Series(...)
    data.append(df_row)

df = pd.DataFrame(data)

这比在for循环中调用df.append效率更高,因为这会导致quadratic copying

答案 1 :(得分:0)

我相信您正在寻找merge函数!

df_all.merge(df_row, how='outer')的身份试用,应该可以完成工作。