为什么使用 pandas 在 Python 上导入后,来自 df 的同名配对列会发生变化?

Why does paired columns with the same name from a df get changed after being imported on Python using pandas?

我今天发现了一件很奇怪的事,我有一个.csv文件,其中包含一个df,当用Excel:

打开时显示如下所示

Python3x 上执行以下代码后可能会想到:

import pandas as pd
metadata_file_path = r'C:\Users\ResetStoreX\Pictures\Metadata.csv'

df_metadata = pd.read_csv(metadata_file_path, index_col=0)
print(df_metadata)

预期的输出应该是下面这个:

            0     0    1    1      2          2         3        3     4    4      5    5         
0  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes None            
1  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Brown     
2  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Green    
3  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Purple    
4  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Sand    

不过最后变成了这个:

            0   0.1    1  1.1      2        2.1         3      3.1     4  4.1      5   5.1         
0  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes None            
1  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Brown     
2  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Green    
3  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Purple    
4  Background Ocean Body Crab Colour Dark green Eyes type Antennae Claws None Spikes Sand  

可以看出,同名列在导入时被Pandas(或Python)修改,所以在下一列添加了0.1与上一个同名。

我不明白为什么会这样,如果可能的话,我想知道一种防止这种意外修改的方法。

Pandas read_* 方法总是防止列名重复,因为 selecting 有问题。

如果使用 df[0] 它 select 两列,而不是一列。


对于原始列名,可以使用:

df.columns = df.columns.str.split('.').str[0].astype(int)

另一个想法是在 . 之前使用第一个值进行分组而不更改列名:

row = 0
d = {x.iat[0]: x.iat[1] for name, x in df.iloc[row].groupby(lambda x: x.split('.')[0], level=0)}