我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

为了保持数据的整洁和合理,有必要对拿到的数据集进行整理。其中首当其冲的就是重复数据,重复的数据分为两种情况,分别是重复列和重复行。本文就第一种情况,重复列的情况进行阐述。

苏南大叔:数据清洗,如何处理DataFrame的重复列名数据? - 数据清洗处理重复数据
数据清洗,如何处理DataFrame的重复列名数据?(图1-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。本文测试环境:python@3.12.3pandas@2.2.2numpy@1.26.4xlrd@2.0.1openpyxl@3.1.2

dataframe合并,后缀区分

重复的列名可能出现在多个数据进行合并的过程中。可能涉及的是pd.merge()函数,参考文章:

从上面的文章里面,可以看到:不同dataframe里面的同名列,合并后,会被强制加后缀进行区分。

import pandas as pd
df = pd.DataFrame({
    'name': ["虎子","老许","二赖子"],
    'age': [3, 2, 5]
})
df2 = pd.DataFrame( data = [
        ['虎子', 1],
        ['老许', 2],
        ['二赖子', 3],
    ],
    columns = ['name', 'age']
)
df3 = pd.merge(df, df2, on=['name'])
print(df3)

输出:

   name   age_x  age_y
0   虎子      3      1
1   老许      2      2
2  二赖子     5      3

dataframe定义写法一,合并

理论上来说,dataframe的定义方式很多,不会出现同名列的不同处理方式。然而,事实并非如此,下面的定义中:
df定义方式一,同名列将会默认覆盖,后者覆盖前者。

import pandas as pd
df = pd.DataFrame({
    'name': ["虎子","老许","二赖子"],
    'age': [3, 2, 5],
    'age': [1, 2, 3]
})
print(df)
print(df.columns)

输出:

  name  age
0   虎子    1
1   老许    2
2  二赖子    3
Index(['name', 'age'], dtype='object')

dataframe定义写法二,共存

df定义方式二,同名列将同时存在。

import pandas as pd
df = pd.DataFrame( data = [
        ['虎子', 3, 1],
        ['老许', 2, 2],
        ['二赖子', 5, 3],
    ],
    columns = ['name', 'age', 'age']
)
print(df)
print(df.columns)

输出:

  name  age  age
0   虎子    3    1
1   老许    2    2
2  二赖子    5    3
Index(['name', 'age', 'age'], dtype='object')

列改名方式一

处理方式之一,把相关的列改个名字,那么相同列名的数据,就可以继续保存了。使用df.rename()操作的话,无法区分同名列,结果就是同时被改名了。

import pandas as pd
df = pd.DataFrame( data = [
        ['虎子', 3, 1],
        ['老许', 2, 2],
        ['二赖子', 5, 3],
    ],
    columns = ['name', 'age', 'age']
)
df = df.rename(columns={'age': 'aaa'})
print(df)

输出:

  name  aaa  aaa
0   虎子    3    1
1   老许    2    2
2  二赖子   5    3

列改名方式二【推荐】

直接修改df.columns这个list即可。参考文章:

import pandas as pd
df = pd.DataFrame( data = [
        ['虎子', 3, 1],
        ['老许', 2, 2],
        ['二赖子', 5, 3],
    ],
    columns = ['name', 'age', 'age']
)
df.columns = ['name', 'age', 'age_y']
print(df)

输出:

  name    age  age_y
0   虎子    3      1
1   老许    2      2
2  二赖子   5      3

列改名方式三【推荐】

也是直接修改的df.columns,但是更有针对性了。

import pandas as pd
df = pd.DataFrame( data = [
        ['虎子', 3, 1],
        ['老许', 2, 2],
        ['二赖子', 5, 3],
    ],
    columns = ['name', 'age', 'age']
)
tmp = list(df.columns)
tmp[2] = "age_z"
df.columns = tmp
print(df)

输出:

  name   age  age_z
0   虎子    3      1
1   老许    2      2
2  二赖子   5      3

删除列

在删除一列数据的相关函数中,可以看到对于列名相同的情况,是无从下手。但是苏南大叔个人认为,可以先改名再删除。

import pandas as pd
df = pd.DataFrame( data = [
        ['虎子', 3, 1],
        ['老许', 2, 2],
        ['二赖子', 5, 3],
    ],
    columns = ['name', 'age', 'age']
)
tmp = list(df.columns)
tmp[2] = "age_z"
df.columns = tmp
df.drop("age_z", axis=1, inplace=True)
print(df)

输出:

  name    age
0   虎子    3
1   老许    2
2  二赖子   5

更多列删除方式,可以参考:

结束语

删除掉重复数据,就可以做下一步的操作了。更多python文章,可以参考苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python