为什么使用 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)}
我今天发现了一件很奇怪的事,我有一个.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)}