Python pandas 數據無法正常分列

在數據處理時,有時需要對數據進行分列,類似于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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容