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
是现在最好的解决方案。
答案 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