pandas22 pd.concat軸方向接続(またはバインドまたはスタック)(tcy)
9202 ワード
pd.concat 2018/12/29
1.
====================================================================
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
:
# pandas (DataFrame Series)
#
objs # 。 keys ( levels[0])
axis=0 #
join="outer" # inner outer
join_axes=None # 。 n-1 , /
#
keys=None # 。 、 、 ( levels )
levels =None # levels , keys
names=None # levels , keys
verify _integrity=False# ,True 。
ignore_index=False # , range(total_length)
copy=True #
====================================================================
:
concat() , 。
, 。
frames = [ process_your_file(f) for f in files ]
result = pd.concat(frames)
=============================================================
2.
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],'B': ['B3', 'B4', 'B5'],'C': ['C3', 'C4', 'C5']})
df3 = pd.DataFrame({'A': ['A6', 'A7', 'A8'],'B': ['B6', 'B7', 'B8'],'C': ['C6', 'C7', 'C8']})
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6'],'D': ['D2', 'D3', 'D6'],'F': ['F2', 'F3', 'F6']},index=[2,3,4])
# 1:axis
result = pd.concat([df1, df4], sort=False) # axis=0
result1 =pd.concat([df1, df4], axis=1, sort=False)# axis=1
df1 A B C result result1
0 A0 B0 C0 A B C D F
1 A1 B1 C1 0 A0 B0 C0 NaN NaN A B C B D F
2 A2 B2 C2 1 A1 B1 C1 NaN NaN 0 A0 B0 C0 NaN NaN NaN
df4 B D F 2 A2 B2 C2 NaN NaN 1 A1 B1 C1 NaN NaN NaN
2 B2 D2 F2 2 NaN B2 NaN D2 F2 2 A2 B2 C2 B2 D2 F2
3 B3 D3 F3 3 NaN B3 NaN D3 F3 3 NaN NaN NaN B3 D3 F3
4 B6 D6 F6 4 NaN B6 NaN D6 F6 4 NaN NaN NaN B6 D6 F6
==========================================================
# 2:join
# inner outer ; join='outer' ,sort=False
result = pd.concat([df1, df4], join='outer',sort=False) #
result1 = pd.concat([df1, df4], join='inner',sort=False)#
df1 A B C result result1
0 A0 B0 C0 A B C D F B
1 A1 B1 C1 0 A0 B0 C0 NaN NaN 0 B0
2 A2 B2 C2 1 A1 B1 C1 NaN NaN 1 B1
df4 B D F 2 A2 B2 C2 NaN NaN 2 B2
2 B2 D2 F2 2 NaN B2 NaN D2 F2 2 B2
3 B3 D3 F3 3 NaN B3 NaN D3 F3 3 B3
4 B6 D6 F6 4 NaN B6 NaN D6 F6 4 B6
===========================================================
# 3:join_axes
pd.concat([df1, df4], axis=1, join_axes=[df1.index])
A B C B D F
0 A0 B0 C0 NaN NaN NaN
1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 B2 D2 F2
pd.concat([df1, df4], join_axes=[df1.columns])
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
2 NaN B2 NaN
3 NaN B3 NaN
4 NaN B6 NaN
=====================================================
# 4:keys
frames = [df1, df2, df3]
piece={'x': df1, 'y': df2, 'z': df3}
result = pd.concat(frames)
result1 = pd.concat(frames, keys=['x', 'y', 'z'],names=['key1','key2'])#
result1 = pd.concat( piece,names=['key1','key2']) #
result1 = pd.concat(piece, keys=['x', 'y','z'], # ,
names=['key1','key2']) # ;names
result1 = pd.concat(piece, keys=['x', 'y', 'z'],names=['key1','key2'], #
levels=[['x', 'y', 'z', 'w']]) #levels keys
result1.loc['y'] # y, df2
df1 A B C result result1
0 A0 B0 C0
1 A1 B1 C1 A B C key1 key2 A B C
2 A2 B2 C2 0 A0 B0 C0 x 0 A0 B0 C0
df2 A B C 1 A1 B1 C1 1 A1 B1 C1
0 A3 B3 C3 2 A2 B2 C2 2 A2 B2 C2
1 A4 B4 C4 0 A3 B3 C3 y 0 A3 B3 C3
2 A5 B5 C5 1 A4 B4 C4 1 A4 B4 C4
df3 A B C 2 A5 B5 C5 2 A5 B5 C5
0 A6 B6 C6 0 A6 B6 C6 z 0 A6 B6 C6
1 A7 B7 C7 1 A7 B7 C7 1 A7 B7 C7
2 A8 B8 C8 2 A8 B8 C8 2 A8 B8 C8
=====================================================
# 5:ignore_index
result1 =pd.concat([df1, df4], sort=False)
result1 =df1.append(df4,sort=False) #
result2 =pd.concat([df1, df4], axis=0, sort=False, ignore_index=True)
result2 =df1.append(df4, ignore_index=True,sort=False)#
result3 =pd.concat([df1, df4], axis=1, sort=False)
result4 =pd.concat([df1, df4], axis=1, sort=False, ignore_index=True)
result1 result2 result3 result4
A B C D F A B C D F A B C B D F 0 1 2 3 4 5
0 A0 B0 C0 NaN NaN 0 A0 B0 C0 NaN NaN 0 A0 B0 C0 NaN NaN NaN 0 A0 B0 C0 NaN NaN NaN
1 A1 B1 C1 NaN NaN 1 A1 B1 C1 NaN NaN 1 A1 B1 C1 NaN NaN NaN 1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 NaN NaN 2 A2 B2 C2 NaN NaN 2 A2 B2 C2 B2 D2 F2 2 A2 B2 C2 B2 D2 F2
2 NaN B2 NaN D2 F2 3 NaN B2 NaN D2 F2 3 NaN NaN NaN B3 D3 F3 3 NaN NaN NaN B3 D3 F3
3 NaN B3 NaN D3 F3 4 NaN B3 NaN D3 F3 4 NaN NaN NaN B6 D6 F6 4 NaN NaN NaN B6 D6 F6
4 NaN B6 NaN D6 F6 5 NaN B6 NaN D6 F6
=======================================================
# 6:verify_integrity
pd.concat(frames, verify_integrity=True)#
pd.concat(frames, verify_integrity=True)#ValueError
=======================================================
# 7:
# 7.1:
s1 = pd.Series(['a', 'b'])
s2 = pd.Series(['c', 'd'])
result1=pd.concat([s1, s2])
result2=pd.concat([s1, s2],axis=1)
result3=pd.concat([s1, s2], keys=['s1', 's2',],names=['key1','key2'])
# result1 result2 result3
# key1 key2
# 0 a # s1 0 a
# 1 b # 0 1 # 1 b
# 0 c # 0 a c # s2 0 c
# 1 d # 1 b d # 1 d
=====================================================
# 7.2:
s1 = pd.Series(['X0', 'X1', 'X2'], name='X')
result = pd.concat([df1, s1,s1], axis=1)
A B C X X
0 A0 B0 C0 X0 X0
1 A1 B1 C1 X1 X1
2 A2 B2 C2 X2 X2
result = pd.concat([df1, s1])
A B C 0
0 A0 B0 C0 NaN
1 A1 B1 C1 NaN
2 A2 B2 C2 NaN
0 NaN NaN NaN X0
1 NaN NaN NaN X1
2 NaN NaN NaN X2
=========================================================
# 7.3:
s3 = pd.Series([0, 1, 2, 3], name='foo')
s4 = pd.Series([0, 1, 2, 3])
s5 = pd.Series([0, 1, 4, 5])
pd.concat([s3, s4, s5], axis=1)
foo 0 1
0 0 0 0
1 1 1 1
2 2 2 4
3 3 3 5
pd.concat([s3, s4, s5], axis=1, keys=['red','blue','yellow'])
red blue yellow
0 0 0 0
1 1 1 1
2 2 2 4
3 3 3 5