熊猫中的pd.concat方法不遵循传递的ignore_axis参数

时间:2018-07-30 11:21:52

标签: python pandas indexing concat

我对pd.concat()的以下行为感到困惑。

有关可重现的示例:

print(dff1)
   R1        R2        R3        R4        R5        R6        R7  \
0  0.471973  0.520696  0.002054  0.003792  0.468673  0.689152  0.832767   
1  0.692504  0.681589  0.006030  0.018702  0.329242  0.493711  0.510571   
2  0.456881  0.554278  0.003793  0.003721  0.539799  0.630306  0.649009   
3  0.622189  0.597208  0.001313  0.001932  0.242561  0.529820  0.467826   
4  0.605414  0.678142  0.041302  0.037944  0.386975  0.856687  0.419201   

         R8  
0  0.155941  
1  0.863021  
2  0.790688  
3  0.872659  
4  0.037814  

print(dff2)
 Id
22275  29668
11689  15503
54894  73108
19839  26429
55252  73574

dff3 = pd.concat([dff1, dff2], axis = 1, ignore_index = True)
print(dff3)
  0         1         2         3         4         5         6  \
0      0.471973  0.520696  0.002054  0.003792  0.468673  0.689152  0.832767   
1      0.692504  0.681589  0.006030  0.018702  0.329242  0.493711  0.510571   
2      0.456881  0.554278  0.003793  0.003721  0.539799  0.630306  0.649009   
3      0.622189  0.597208  0.001313  0.001932  0.242561  0.529820  0.467826   
4      0.605414  0.678142  0.041302  0.037944  0.386975  0.856687  0.419201   
11689       NaN       NaN       NaN       NaN       NaN       NaN       NaN   
19839       NaN       NaN       NaN       NaN       NaN       NaN       NaN   
22275       NaN       NaN       NaN       NaN       NaN       NaN       NaN   
54894       NaN       NaN       NaN       NaN       NaN       NaN       NaN   
55252       NaN       NaN       NaN       NaN       NaN       NaN       NaN   

              7        8  
0      0.155941      NaN  
1      0.863021      NaN  
2      0.790688      NaN  
3      0.872659      NaN  
4      0.037814      NaN  
11689       NaN  15503.0  
19839       NaN  26429.0  
22275       NaN  29668.0  
54894       NaN  73108.0  
55252       NaN  73574.0  

因此,似乎ignore_index参数被忽略了,但我不明白为什么。

您的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

否,您需要reset_indexdrop=True作为输入DataFrames的默认索引:

dff3 = pd.concat([dff1.reset_index(drop=True),
                  dff2.reset_index(drop=True)], axis = 1, ignore_index = True)

参数ignore_index用于输出axis=1的列的默认索引(如果axis=0或索引的索引,如果DataFrame

但是另一个轴,axis=1的索引是对齐的,因此您会得到NaN。如果使用axis=0,则会有对齐的列。

示例

dff3 = pd.concat([dff1.reset_index(drop=True),
                  dff2.reset_index(drop=True)], axis = 1, ignore_index = True)
print (dff3)
          0         1         2         3         4         5         6  \
0  0.471973  0.520696  0.002054  0.003792  0.468673  0.689152  0.832767   
1  0.692504  0.681589  0.006030  0.018702  0.329242  0.493711  0.510571   
2  0.456881  0.554278  0.003793  0.003721  0.539799  0.630306  0.649009   
3  0.622189  0.597208  0.001313  0.001932  0.242561  0.529820  0.467826   
4  0.605414  0.678142  0.041302  0.037944  0.386975  0.856687  0.419201   

          7      8  
0  0.155941  29668  
1  0.863021  15503  
2  0.790688  73108  
3  0.872659  26429  
4  0.037814  73574  

如果省略参数ignore_index = True

dff3 = pd.concat([dff1.reset_index(drop=True),
                  dff2.reset_index(drop=True)], axis = 1)
print (dff3)
         R1        R2        R3        R4        R5        R6        R7  \
0  0.471973  0.520696  0.002054  0.003792  0.468673  0.689152  0.832767   
1  0.692504  0.681589  0.006030  0.018702  0.329242  0.493711  0.510571   
2  0.456881  0.554278  0.003793  0.003721  0.539799  0.630306  0.649009   
3  0.622189  0.597208  0.001313  0.001932  0.242561  0.529820  0.467826   
4  0.605414  0.678142  0.041302  0.037944  0.386975  0.856687  0.419201   

         R8     Id  
0  0.155941  29668  
1  0.863021  15503  
2  0.790688  73108  
3  0.872659  26429  
4  0.037814  73574  

如果concat中的indexaxis=0是默认参数,则被忽略):

dff3 = pd.concat([dff1, dff2], ignore_index = True)
print (dff3)
        Id        R1        R2        R3        R4        R5        R6  \
0      NaN  0.471973  0.520696  0.002054  0.003792  0.468673  0.689152   
1      NaN  0.692504  0.681589  0.006030  0.018702  0.329242  0.493711   
2      NaN  0.456881  0.554278  0.003793  0.003721  0.539799  0.630306   
3      NaN  0.622189  0.597208  0.001313  0.001932  0.242561  0.529820   
4      NaN  0.605414  0.678142  0.041302  0.037944  0.386975  0.856687   
5  29668.0       NaN       NaN       NaN       NaN       NaN       NaN   
6  15503.0       NaN       NaN       NaN       NaN       NaN       NaN   
7  73108.0       NaN       NaN       NaN       NaN       NaN       NaN   
8  26429.0       NaN       NaN       NaN       NaN       NaN       NaN   
9  73574.0       NaN       NaN       NaN       NaN       NaN       NaN   

         R7        R8  
0  0.832767  0.155941  
1  0.510571  0.863021  
2  0.649009  0.790688  
3  0.467826  0.872659  
4  0.419201  0.037814  
5       NaN       NaN  
6       NaN       NaN  
7       NaN       NaN  
8       NaN       NaN  
9       NaN       NaN  

按列对齐,索引不变,因为没有参数ignore_index = True

dff3 = pd.concat([dff1, dff2])
print (dff3)
            Id        R1        R2        R3        R4        R5        R6  \
0          NaN  0.471973  0.520696  0.002054  0.003792  0.468673  0.689152   
1          NaN  0.692504  0.681589  0.006030  0.018702  0.329242  0.493711   
2          NaN  0.456881  0.554278  0.003793  0.003721  0.539799  0.630306   
3          NaN  0.622189  0.597208  0.001313  0.001932  0.242561  0.529820   
4          NaN  0.605414  0.678142  0.041302  0.037944  0.386975  0.856687   
22275  29668.0       NaN       NaN       NaN       NaN       NaN       NaN   
11689  15503.0       NaN       NaN       NaN       NaN       NaN       NaN   
54894  73108.0       NaN       NaN       NaN       NaN       NaN       NaN   
19839  26429.0       NaN       NaN       NaN       NaN       NaN       NaN   
55252  73574.0       NaN       NaN       NaN       NaN       NaN       NaN   

             R7        R8  
0      0.832767  0.155941  
1      0.510571  0.863021  
2      0.649009  0.790688  
3      0.467826  0.872659  
4      0.419201  0.037814  
22275       NaN       NaN  
11689       NaN       NaN  
54894       NaN       NaN  
19839       NaN       NaN  
55252       NaN       NaN