数据清洗:Python将一列数据拆分成多列

您所在的位置:网站首页 如何将一列中的数据分成两列显示出来 数据清洗:Python将一列数据拆分成多列

数据清洗:Python将一列数据拆分成多列

2023-12-19 07:48| 来源: 网络整理| 查看: 265

最近在处理数据的时候遇到这样一个问题,原始数据中有些字段以(key:value)存储的数据,如表中SEX:Sex一列取值[F: Female],其中F是key、Female是具体的value。为了简化数据,想利用Python把数据进行拆分,只取其中的value。 在这里插入图片描述

观察数据发现,有些字段的取值均为key:value形式,比如SEX:Sex字段,需要进行拆分;而有些字段是不需要进行拆分的,比如TIME_PERIOD:Time period字段,再比如SOURCE_LINK:Citation of or link to the data source字段,取值为链接也不用拆分。按以下思路进行数据处理:

读取数据,查看数据的基本情况; import pandas as pd file='fusion_COVID_UNICEF__all.csv' ##所在文件夹目录 data=pd.read_csv(file,encoding='utf-8',sep=None,delimiter=",",error_bad_lines=False) columns=data.columns.tolist() ##获取字段 print(columns) data.head()

在这里插入图片描述

统计需要进行拆分的字段:如果某一列所有非空取值均包含“:”,而不包含“http:”和“https:”,则需要拆分; ##判断字段是否需要拆分 split_col=[] ##记录需要拆分的字段 for i in columns: num=0 #print(i) #print(data[i]) temp=data[i].dropna() ##去掉字段中的空值 #print(len(data[i]),len(temp)) if len(temp)>0: ##对于有取值的字段,判断是否需要进行拆分 for j in temp: if ":" in str(j) and "http:" not in str(j) and "https:" not in str(j): num+=1 if num==len(temp): #print("需拆分:",i) split_col.append(i) print("需要拆分的字段:",split_col)

在这里插入图片描述

拆分数据并进行保存。 利用pandas.Series.str.split(pat=None, n=-1, expand=False)函数进行数据拆分。其中,pat表示分隔符,默认以空格分隔;n表示分割次数,默认为 -1,即分隔所有;expand为true,表示会把切割出来的内容当做一列,产生多列,若为False,则把切割后的内容当作一个列表。 ##将数据进行拆分并保存 cleaned=pd.DataFrame() for i in columns: if i in split_col: #print(i) temp=data[i].str.split(": ",expand=True) #print(temp[1]) cleaned[i]=temp[1] else: cleaned[i]=data[i] cleaned.to_csv("data/result_UNICEF_COVID.csv",encoding='utf-8',index=0) print ('--- End ---') cleaned.head()

在这里插入图片描述

附:完整代码和数据可通过以下链接自行下载。 链接:https://pan.baidu.com/s/1noQYAmxr9KNSKbtDfr_XwQ 提取码:e8z7

ps:初衷是通过撰写博文记录自己所学所用,实现知识的梳理与积累;将其分享,希望能够帮到面临同样困惑的小伙伴儿。如发现博文中存在问题,欢迎随时交流~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3