DataFrame字符串之分割split()、清洗drop()、合并concat()、重新建立索引reset_index() - (Python)

版权声明:转载请联系作者,获得允许后,添加链接及作者到页首 https://blog.csdn.net/weixin_40683253/article/details/86679221

数据建模之前,我们从数据部门拿到数据,但是这些数据的格式往往并不是我们可以直接使用的,比如下面表中的数据(左:原数据格式)。

原数据格式id自成一列,这个很好,但是标签和标签的置信度(这个id属于这个标签的可能性) 都在一个单元格里,仅用空格分隔开来,这对数据处理的过程中很不方便。

我们需要将数据转化成右图格式(右:所需数据格式),这有利于我们用id和其他表格中的数据匹配。

原数据格式: id 标签   所需数据格式: id tag tag置信度
  222201 数学老师 0.67 父亲 0.87 儿子 0.77     222201 数学老师 0.67
  222202 全职太太 0.56 孕妈 0.45     222202 全职太太 0.56
  222203 大学生 0.33 服务员 0.48 社团主席 0.68     222203 大学生 0.33
  222204 父亲 0.79 服务员 0.56     222204 父亲 0.79
  222205 语文老师 0.89      222205 语文老师 0.89
  222206 年级长 0.86 数学老师 0.74     222206 年级长 0.86
  222207 大学生 0.65      222207 大学生 0.65

Python代码:

import pandas as pd

datafile = u'D:\\pythondata\\learn\\split.xlsx'
data = pd.read_excel(datafile)

n = 3 #n表示一个id最多有多少个标签
names=data['标签'].str.split(' ',expand=True) #将标签列按照空格分割数据
names.columns=['tag','tag置信度'] * n  #分割为多列之后为列重命名

data_total = pd.DataFrame(columns=['id', 'tag', 'tag置信度'])#设置一个空的DataFrame
for i in range(n):
    data_0i = pd.concat([data.iloc[:,:1], names.iloc[:,i*2:(i+1)*2]], axis = 1, join='outer', sort=False)
    data_0i = data_0i.dropna()#删除包含空值的行
    data_total = pd.concat([data_total, data_0i],axis=0)#向下合并数据
    data_total = data_total.reset_index(drop = True)#重新建立索引,代替原有的索引
print(data_total)

在实现这个格式转化的过程中,我们涉及到分割函数 split()、合并函数 concat()、删除缺失值函数 dropna()、建立索引 reset_index(),备忘,over!

猜你喜欢

转载自blog.csdn.net/weixin_40683253/article/details/86679221