在數據處理時,有時需要對數據進行分列,類似于Excel里面的分列功能,這個在pandas里面也可以實現,下面就來詳細介紹相關的方法及注意點,前提是你已經對pandas有一定的了解
導入數據
這里介紹的是從Excel導入數據,當然也可以從其他文件導入、數據庫查詢后導入等,為了弄清楚里面的細節,本教程從Excel導入數據
import pandas as pd
import numpy as np
data=pd.read_excel('split.xlsx')
查看原始數據及各列數據類型,可以看到指標、選項都是object類型,其中選項列沒有缺失值
原始數據.png
對選項列進行分列
對導入的原始數據進行分列,這里運用的是pandas.Series.str.split方法,可以理解為把Series作為字符串進行分列操作,分列都是對字符串進行操作的
split_data=data['選項'].str.split(':',expand=True) #需要添加expand=True,使分列后的數據擴展為一個數據框
split_data
原始數據分列.png
可以明顯看到分列后的數據,第1、5、6索引行全是缺失值,對比上面的原始數據,這些都是只有一個數字,難道分列方法split對只有一個數字不能分列嗎?其實則并不然,實際的原因請往下看
尋找原因
查看Excel里面的數據尋找原因,發現選項所在列,單個數字在Excel單元格是數字,其他的都是文本,因Excel里面數字一般都是在單元格里面都是靠右對齊,而文本都是靠左對齊
Excel數據.png
但是pandas導入數據后,已經查看了選項列為object類型,難道判斷的數據類型有問題?請繼續往下看
強制轉換數據類型,再次分列
data['選項']=data['選項'].astype('str')
#data['選項']=data['選項'].astype('object') #這兩個代碼都可以轉換
split_data=data['選項'].str.split(':',expand=True)
split_data
數據類型轉換后再分列.png
可以看到已經成功進行分列了,說明pandas讀取的數據,判斷出來的數據類型并不一定是這一列所有數據的真實類型,而是能概括所有類型的一個較大的類型(兼容所有類型),并沒有強制轉換為同一個數據類型,比如選項列,里面有數值型、字符串型,那么較大的一個類型是object,pandas及認為該列數據類型是object
合并數據
split_data.columns=['s_1','s_2','s_3','s_4']
data.join(split_data) #join比較方便,根據索引直接對兩個表進行鏈接,而merge需要設置鏈接時的字段
成功分列后數據.png
分列時注意事項
1.導入數據后一定要檢查數據類型,不要急著去處理
2.分列前檢查該列數據類型,確保該列數據類型都是字符串類型,或者object類型,當數據量很大的時候這個很容易出錯
pandas里面數據類型對照
詳情請參考這篇博文,數據處理過程的數據類型
數據類型.jpg