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

數據建模之前,我們從數據部門拿到數據,但是這些數據的格式往往並不是我們可以直接使用的,比如下面表中的數據(左:原數據格式)。

原數據格式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!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章