在pandas中附加的列名称被删除

时间:2015-06-22 05:24:34

标签: python pandas

WinPython:pandas 0.16.1,py3.4

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])
df1.columns.names=["hello"]
df1
hello   A   B   C   D
0      A0  B0  C0  D0
1      A1  B1  C1  D1
2      A2  B2  C2  D2
3      A3  B3  C3  D3
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
                    'D': ['D2', 'D3', 'D6', 'D7'],
                    'F': ['F2', 'F3', 'F6', 'F7']},
                   index=[2, 3, 6, 7])
df4.columns.names=["hello"]
df4
hello   B   D   F
2      B2  D2  F2
3      B3  D3  F3
6      B6  D6  F6
7      B7  D7  F7

我需要加入类似于上面显示的数据框架,但是在追加操作中会删除列名hello(它看起来不是一个列!)。为什么?我必须强制这样:pv.columns.names = df4.columns.names

df1.append(df4)
     A   B    C   D    F
0   A0  B0   C0  D0  NaN
1   A1  B1   C1  D1  NaN
2   A2  B2   C2  D2  NaN
3   A3  B3   C3  D3  NaN
2  NaN  B2  NaN  D2   F2
3  NaN  B3  NaN  D3   F3
6  NaN  B6  NaN  D6   F6
7  NaN  B7  NaN  D7   F7

UPD:concat / append在它们不同时删除轴0/1名称。所以,我认为,在.names之后强制append是现在最好的解决方案。

3 个答案:

答案 0 :(得分:1)

为此目的,DataFrame.append method不如pandas.concat function好。

使用pandas.concat function,您将保留索引。

pd.concat([df1,df2])
        A       B   C       D   F
hello                   
0       A0      B0  C0      D0  NaN
1       A1      B1  C1      D1  NaN
2       A2      B2  C2      D2  NaN
3       A3      B3  C3      D3  NaN
2       NaN     B2  NaN     D2  F2
3       NaN     B3  NaN     D3  F3
6       NaN     B6  NaN     D6  F6
7       NaN     B7  NaN     D7  F7

答案 1 :(得分:0)

我认为pd.DataFrame.combine_first()会有所帮助。

df1.combine_first(df4)
Out[98]: 
hello    A   B    C   D    F
0       A0  B0   C0  D0  NaN
1       A1  B1   C1  D1  NaN
2       A2  B2   C2  D2   F2
3       A3  B3   C3  D3   F3
6      NaN  B6  NaN  D6   F6
7      NaN  B7  NaN  D7   F7

它类似于df1.update(df4),但使用了'外部'在df1中加入未见记录的方式。

答案 2 :(得分:-1)

我得到了这个(Anaconda(Windows 64位),Python 3.4,Pandas 0.16.1):

df1.append(df4)
Out[190]: 
     A   B    C   D    F  hello
0   A0  B0   C0  D0  NaN      0
1   A1  B1   C1  D1  NaN      1
2   A2  B2   C2  D2  NaN      2
3   A3  B3   C3  D3  NaN      3
0  NaN  B2  NaN  D2   F2      2
1  NaN  B3  NaN  D3   F3      3
2  NaN  B6  NaN  D6   F6      6
3  NaN  B7  NaN  D7   F7      7