数据清洗,如何处理DataFrame的重复列名数据?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
为了保持数据的整洁和合理,有必要对拿到的数据集进行整理。其中首当其冲的就是重复数据,重复的数据分为两种情况,分别是重复列和重复行。本文就第一种情况,重复列的情况进行阐述。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。本文测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
,xlrd@2.0.1
,openpyxl@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
文章,可以参考苏南大叔的博客:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。