在進行資料處理時,如果資料簡單,數量不多,excel是大家的首選。但是當資料眾多,型別複雜,需要靈活地顯示切片、進行索引、以及排序時,python會更加方便。借助python中的numpy和pandas庫,它能快速完成各種任務,包括資料的建立、檢查、清洗、預處理、提取、篩選、彙總、統計等。接下來幾篇文章,將以excel為參照,介紹python中資料的處理。
提到pandas,那就不得不提兩類重要的資料結構,series和dataframe,這兩類資料結構都是建立在numpy的陣列array基礎上。與array相比,series是乙個一維的資料集,但是每個資料元素都帶有乙個索引,有點類似於字典。而dataframe在陣列的基礎上,增加了行索引和列索引,類似於series的字典,或者說是乙個列表集。
所以在資料處理前,要安裝好numpy , pandas。接下來就看看如何完成一套完整的資料操作。
建立資料表的方法分兩種,分別是從外部匯入資料,以及直接寫入資料。
匯入資料
在python中,也可外部匯入xlsx格式檔案,使用read_excel()函式:
import pandas as pd
from pandas import dataframe,series
data=dataframe(pd.read_excel('c:/python27/test.xlsx'))
print data
輸出:gene size function
0 arx1 411 nan
1 arx2 550 monooxygenase
2 arx3 405 aminotransferase
即:呼叫pandas中read_excel屬性,來讀取檔案test.xlsx,並轉換成dataframe格式,賦給變數data。在每一行後,自動分了乙個索引值。除了excel,還支援以下格式檔案的匯入和寫入:
python寫入的方法有很多,但還是不如excel方便。常用的例如使用相等長度的字典或numpy陣列來建立:
data1 = dataframe(
)print data1
輸出func gene size
0 nan arx1 411
1 monooxyg arx2 550
2 amino arx3 405
分配乙個行索引後,自動排序並輸出。
在python中,可以使用info()函式檢視整個資料的詳細資訊。
print data.info()
輸出rangeindex: 7 entries, 0 to 6
data columns (total 3 columns):
gene 7 non-null object
size 7 non-null int64
function 5 non-null object
dtypes: int64(1), object(2)
memory usage: 240.0+ bytes
none
此外,還可以通過shape, column, index, values, dtypes等函式來檢視資料維度、行列組成、所有的值、 資料型別:
print data1.shape
print data1.index
print data1.columns
print data1.dtypes
輸出(3, 3)
rangeindex(start=0, stop=3, step=1)
index([u'func', u'gene', u'size'], dtype='object')
func object
gene object
size int64
dtype: object
在excel中可以按「f5」,在「定位條件」中選擇「空值」,選中後,輸入替換資訊,再按「ctrl+enter」即可完成替換。
替換空值
在python中,使用函式 isnull 和 notnull 來檢測資料丟失, 包含空值返回true,不包含則返回false。
pd.isnull(data1)
pd.notnull(data1)
也可以使用函式的例項方法,以及加入引數,對某一列進行檢查:
print data1['func'].isnull()
輸出func gene size
0 true false false
1 false false false
2 false false false
再使用fillna對空值進行填充:
data.fillna(value=0)
#用0來填充空值
data['size'].fillna(data1['size'].mean())
#用data1中size列的平均值來填充空值
data['func']=data['func'].map(str.strip)
#清理func列中存在的空格
excel中可以按「ctrl+f」,可調出替換對話方塊,替換相應資料。
查詢替換
python中,使用replace函式替換:
data['func'].replace('monooxygenase', 'oxidase')
將func列中的'monooxygenase'替換成'oxidase'。
excel中,通過「資料-篩選-高階」可以選擇性地看某一列的唯一值。
檢視唯一值
python中,使用unique函式檢視:
print data['func'].unique()
輸出[nan u'monooxygenase' u'aminotransferase' u'methyltransferase']
excel中,通過upper、lower、proper等函式來變成大寫、小寫、首字母大寫。
大小寫函式
python中也有同名函式:
data1['gene'].str.lower()
excel中可以通過「資料-刪除重複項」來去除重複值。
資料-刪除重複值
python中,可以通過drop_duplicates函式刪除重複值:
print data['func'].drop_duplicates()
輸出0 nan
1 monooxygenase
2 aminotransferase
3 methyltransferase
name: func, dtype: object
還可以設定「 keep=』last』 」引數,後出現的被保留,先出現的被刪除:
print data['func'].drop_duplicates(keep='last')
輸出2 aminotransferase
3 methyltransferase
6 monooxygenase
8 nan
name: func, dtype: object
內容參考:
python for data analysis
藍鯨**分析部落格,作者藍鯨(王彥平)
像Excel一樣使用Python(二)
像excel一樣使用python,上一期介紹了生成 檢視 替換等功能,這一期介紹資料預處理,包括資料表合併 排序 分組等。excel裡智慧型複製貼上來合併 或者通過vlookup函式分步實現。python中,可以直接使用merge函式來合併兩個表,可選引數較多,這裡只介紹最常用的幾個引數 df1.m...
像用excel一樣用pandas
預計需要15min閱讀此教材 本教材僅講述如何檢視excel資料,篩選,排序,查詢替換資料,不涉及excel中複雜的圖形繪製及樣式修改。假設,已經存在乙個test.xlsx檔案,僅包含乙個sheet,檔案內容如下。col1 col2 foo1 bar1 foo2 bar2 讀取乙個excel並賦值給...
像外行一樣思考,像專家一樣實踐
像外行一樣思考,像專家一樣實踐,不只是說說而已。題記 看了試讀的章節有些日子,看完了試讀部分,其中一部分是能和我共鳴,還有一部分觀點,自己也比較贊成,但貌似又有些抽象。我想,書不單是用來讀的,讀一本好書,就像吃肉一樣,吸收書中的營養,把營養轉換為自己的血液,直到骨髓中,成為生命中的一部分。像外行一樣...