操纵2个以上的数据帧

时间:2017-04-24 06:56:34

标签: python pandas

我有6个不同的数据帧,我想一个接一个追加。

我发现这样做的唯一方法是每次追加2,但我相信必须有更有效的方法来做到这一点。

我也期待在那之后更改索引和标题名称,我也知道如何一个接一个地做,但我也相信还必须有一个有效的方法来做到这一点。

我面临的最后一个问题是如何使用NaN列设置索引,为了set_index,我该如何引用它?

df1

                      NaN     1      2      3
                   1   A   17.03   13.41  19.61
                   7   B   3.42    1.51    5.44
                   8   C   5.65    2.81    1.89
df2
                      NaN     1      2      3
                    1  J   1.60   2.65   1.44
                    5  H   26.78  27.04  21.06 
df3
                      NaN    1      2      3
                   1   L   1.20   1.41   2.04
                   2   M   1.23   1.72   2.47
                   4   R  66.13  51.49  16.62
                   5   F     --  46.89  22.35
df4
                      NaN    1      2      3
                   1   A   17.03   13.41  19.61
                   7   B   3.42    1.51    5.44
                   8   C   5.65    2.81    1.89
df5
                      NaN    1      2      3
                    1  J   1.60   2.65   1.44
                    5  H   26.78  27.04  21.06 
df6
                      NaN    1      2      3
                   1   L   1.20   1.41   2.04
                   2   M   1.23   1.72   2.47
                   4   R  66.13  51.49  16.62
                   5   F     --  46.89  22.35

1 个答案:

答案 0 :(得分:1)

您可以使用concat,对于选择NaN列,可以df.columns[0]list comprehensiondfs = [df1,df2, df3, ...] df = pd.concat([df.set_index(df.columns[0], append=True) for df in dfs]) print (df) 1 2 3 NaN 1 A 17.03 13.41 19.61 7 B 3.42 1.51 5.44 8 C 5.65 2.81 1.89 1 J 1.6 2.65 1.44 5 H 26.78 27.04 21.06 1 L 1.20 1.41 2.04 2 M 1.23 1.72 2.47 4 R 66.13 51.49 16.62 5 F -- 46.89 22.35 使用NaN

print (df3.columns)
Index(['NaN', '1', '2', '3'], dtype='object')

dfs = [df1,df2, df3]
df = pd.concat([df.set_index('NaN', append=True) for df in dfs])
print (df)
           1      2      3
  NaN                     
1 A    17.03  13.41  19.61
7 B     3.42   1.51   5.44
8 C     5.65   2.81   1.89
1 J      1.6   2.65   1.44
5 H    26.78  27.04  21.06
1 L     1.20   1.41   2.04
2 M     1.23   1.72   2.47
4 R    66.13  51.49  16.62
5 F       --  46.89  22.35

编辑:

似乎np.nan值可以是字符串:

#converting to `NaN` if necessary
#df1.columns  = df1.columns.astype(float)
#df2.columns  = df2.columns.astype(float)
#df3.columns  = df3.columns.astype(float)

dfs = [df1,df2, df3]
df = pd.concat([df.set_index(np.nan, append=True) for df in dfs])
print (df)
         1.0    2.0    3.0
  nan                     
1 A    17.03  13.41  19.61
7 B     3.42   1.51   5.44
8 C     5.65   2.81   1.89
1 J      1.6   2.65   1.44
5 H    26.78  27.04  21.06
1 L     1.20   1.41   2.04
2 M     1.23   1.72   2.47
4 R    66.13  51.49  16.62
5 F       --  46.89  22.35

或者如果我有<a href="{% url 'profile:profile_edit' slug=profile.slug %}">Edit</a>的作品:

UISwipeGestureRecognizer