为什么我不能在循环中附加pandas数据帧

mcr*_*gun 7 python dataframe pandas

我知道有几种方法可以在Pandas中构建数据帧.我的问题只是理解为什么下面的方法不起作用.

首先,一个工作的例子.我可以创建一个空数据框,然后添加一个类似于documenta的新数据框

In [3]: df1 = pd.DataFrame([[1,2],], columns = ['a', 'b'])
   ...: df2 = pd.DataFrame()    
   ...: df2.append(df1)   
Run Code Online (Sandbox Code Playgroud)

Out[3]: a b 0 1 2

但是,如果我执行以下操作,则df2变为None:

In [10]: df1 = pd.DataFrame([[1,2],], columns = ['a', 'b'])
    ...: df2 = pd.DataFrame()
    ...: for i in range(10):
    ...:     df2.append(df1)

In [11]: df2
Out[11]:
Empty DataFrame
Columns: []
Index: []
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么它这样工作?谢谢!

小智 14

这是因为.append()方法返回一个新的df:

熊猫文件(0.19.2):

pandas.DataFrame.append

返回: 附加: DataFrame

这是一个工作示例,因此您可以看到循环的每次迭代中发生了什么:

df1 = pd.DataFrame([[1,2],], columns=['a','b'])
df2 = pd.DataFrame()
for i in range(0,2):
    print(df2.append(df1))

>    a  b
> 0  1  2
>    a  b
> 0  1  2
Run Code Online (Sandbox Code Playgroud)

如果将.append()的输出分配给df(即使是同一个),您将获得预期的结果:

for i in range(0,2):
    df2 = df2.append(df1)
print(df2)

>    a  b
> 0  1  2
> 0  1  2
Run Code Online (Sandbox Code Playgroud)