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

时间:2017-05-05 04:40:36

标签: python pandas dataframe

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

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

的新数据框
In [3]: df1 = pd.DataFrame([[1,2],], columns = ['a', 'b'])
   ...: df2 = pd.DataFrame()    
   ...: df2.append(df1)   

Out[3]: a b 0 1 2

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

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: []

有人能解释为什么会这样吗?谢谢!

3 个答案:

答案 0 :(得分:13)

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

  

Pandas Docs (0.19.2)

     

pandas.DataFrame.append

     

返回: 追加: DataFrame

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

df = df.set_index(['month','type'], append=True)['value']
       .unstack(fill_value=0)
       .reset_index(level=1)
#reorder columns
cols = df.columns[1:].tolist() + df.columns[:1].tolist() 
df = df.reindex_axis(cols, axis=1)
print (df)
type  T1  T2  T3  T4  month
0     10   0   0   0      1
1     40   0   0   0      1
2      0   0   0  20      1
3      0  30   0   0      2
4      0   0  10   0      2
5     40   0   0   0      3
6      0   0  50   0      3

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

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

答案 1 :(得分:0)

df.append()返回一个新对象。 df2最初是一个空数据帧,它不会改变。如果你做df3 = df2.append(df1),你会得到你想要的东西

答案 2 :(得分:0)

我认为您正在寻找的是

message= "{ "totalResults":138, "workday_search:workday_hr_resources":1}"

arguments[0] = { "totalResults":138, "workday_search:workday_hr_resources":1}