python 文件数据合并(数据行不对应)( 二 )


那就眼睁睁的看着这种情况发生吗?
当然不是,解决的方法有两种:
第一种就是忽略这种索引,如果索引是这种没有实际意义的流水ID,那么我们可以让他们顺次的往下排列,从而避免重复,设置一个ignore_index即可实现。
import pandas as pddf1 = pd.DataFrame({\u0026#39;A\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;A1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;A2\u0026#39;},\u0026#39;B\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;B1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;B2\u0026#39;}})df2 = pd.DataFrame({\u0026#39;A\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;A3\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;A4\u0026#39;},\u0026#39;B\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;B3\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;B4\u0026#39;}})print(df1)print(df2)print(pd.concat(, ignore_index=True)) A B1 A1 B12 A2 B2 A B1 A3 B32 A4 B4 A B0 A1 B11 A2 B22 A3 B33 A4 B4那如果我觉得原来的索引代表了实际意义,不能忽略呢?
别急,第二种方法就是利用多级索引的方式来保留原索引。
import pandas as pddf1 = pd.DataFrame({\u0026#39;A\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;A1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;A2\u0026#39;},\u0026#39;B\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;B1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;B2\u0026#39;}})df2 = pd.DataFrame({\u0026#39;A\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;A3\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;A4\u0026#39;},\u0026#39;B\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;B3\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;B4\u0026#39;}})print(df1)print(df2)print(pd.concat(, keys=)) A B1 A1 B12 A2 B2 A B1 A3 B32 A4 B4 A Bx 1 A1 B1 2 A2 B2y 1 A3 B3 2 A4 B4还漏了一种情况,就是如果列名不完全一致应该如何处理?
我们继续看看在合并的过程中,列会出现什么现象。
import pandas as pddf1 = pd.DataFrame({\u0026#39;A\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;A1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;A2\u0026#39;},\u0026#39;B\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;B1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;B2\u0026#39;},\u0026#39;C\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;C1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;C2\u0026#39;}})df2 = pd.DataFrame({\u0026#39;B\u0026#39;:{\u0026#39;3\u0026#39;:\u0026#39;B3\u0026#39;,\u0026#39;4\u0026#39;:\u0026#39;B4\u0026#39;},\u0026#39;C\u0026#39;:{\u0026#39;3\u0026#39;:\u0026#39;C3\u0026#39;,\u0026#39;4\u0026#39;:\u0026#39;C4\u0026#39;},\u0026#39;D\u0026#39;:{\u0026#39;3\u0026#39;:\u0026#39;D3\u0026#39;,\u0026#39;4\u0026#39;:\u0026#39;D4\u0026#39;}})print(df1)print(df2)print(pd.concat()) A B C1 A1 B1 C12 A2 B2 C2 B C D3 B3 C3 D34 B4 C4 D4 A B C D1 A1 B1 C1 NaN2 A2 B2 C2 NaN3 NaN B3 C3 D34 NaN B4 C4 D4从结果中我们可以看出,我们这种默认的合并方式是对所有的输入列取并集,如果在某个位置上值缺失,则用NaN值来代替。
如果我们想换一种方式,对输入列取交集,这样就不会出现NaN值了。
import pandas as pddf1 = pd.DataFrame({\u0026#39;A\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;A1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;A2\u0026#39;},\u0026#39;B\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;B1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;B2\u0026#39;},\u0026#39;C\u0026#39;:{\u0026#39;1\u0026#39;:\u0026#39;C1\u0026#39;,\u0026#39;2\u0026#39;:\u0026#39;C2\u0026#39;}})df2 = pd.DataFrame({\u0026#39;B\u0026#39;:{\u0026#39;3\u0026#39;:\u0026#39;B3\u0026#39;,\u0026#39;4\u0026#39;:\u0026#39;B4\u0026#39;},\u0026#39;C\u0026#39;:{\u0026#39;3\u0026#39;:\u0026#39;C3\u0026#39;,\u0026#39;4\u0026#39;:\u0026#39;C4\u0026#39;},\u0026#39;D\u0026#39;:{\u0026#39;3\u0026#39;:\u0026#39;D3\u0026#39;,\u0026#39;4\u0026#39;:\u0026#39;D4\u0026#39;}})print(df1)print(df2)print(pd.concat(, join=\u0026#39;inner\u0026#39;)) A B C1 A1 B1 C12 A2 B2 C2 B C D3 B3 C3 D34 B4 C4 D4 B C1 B1 C12 B2 C23 B3 C34 B4 C4


推荐阅读