Python整合十萬條數據實戰(辦公必備技能)

Python整合十萬條數據實戰(辦公必備技能)


昨天一位粉絲向我求助,想用python解析data文件,然後取出其中的特定數據,我花了很長時間終於搞明白了,現在把具體過程分享給大家,相信學完這套技能,再多的數據都能用python輕鬆搞定。

問題描述:一個.dat文件以UTF-8方式編碼,需要讀取指定時間開始與結束的數據,例如讀取圖形紅框內數據,並將讀取到的數據放入list當中,圖示:

Python整合十萬條數據實戰(辦公必備技能)

這位粉絲有很多這種.dat文件,但是隻想取出其中時間在0.001-0.002之間對應的Cd數據,如上圖中紅框內的數據,並將讀取到的數據放入list當中。剛開始以為用pandas庫能輕鬆搞定,但是實際操作過程中還是遇到一些小麻煩的,下面一起來看看怎麼實現的吧!


第一步:數據讀取

首先,我用pandas打開該文件,並輸出:

<code>data = pd.read_csv('1.dat', header=None)print(data)/<code>


Python整合十萬條數據實戰(辦公必備技能)

Python整合十萬條數據實戰(辦公必備技能)

總共有10萬條數據

第二步:數據整合

因為前10行都是沒用的信息,所以我把前10行刪除:

<code>data=data[10:]/<code>

重新輸出:

Python整合十萬條數據實戰(辦公必備技能)

仔細觀察可以發現,該datafram數據只有1列,表頭為0,所以我們要把這列數據進行分割:


<code>data['Time'] = data[0].str.split('\\t').str[0]data['Cd'] = data[0].str.split('\\t').str[2]/<code>

以‘\\t’為分隔符,分割data[0]數據,將分割後第一列以‘Time’頭命名、第三列以‘Cd’頭命名,重新打印data,代碼為:


<code>print(data.ix[:,['Time', 'Cd']])/<code>

請記住,以上是dataprame數據輸出列的方式,輸出結果為:

Python整合十萬條數據實戰(辦公必備技能)


第三步:數據提取

為了提取時間在0.001至0.002之間對應的Cd列數據,我們要用到pandas庫的比較運算符eq,ne,le,lt,ge,gt等效於==,=!,<=,<,>=,>,用法格式為:

<code>df=data[data['Time'].ge(0.001)]/<code>

意思是取出對應‘Time’列大於等於0.01的所有data的行

<code>dff=df[df['Time'].le(0.002)]/<code>

這句代碼的意思是在上一步的基礎上取出對應‘Time’列小於等於0.02的所有data的行,打印dff:

<code>print(dff.ix[:, ['Time', 'Cd']])/<code>


很不幸的是,系統報了以下錯誤:

<code>TypeError: '>=' not supported betweeninstances of 'str' and 'float'/<code>

這是因為‘Time’列是以字符的格式存儲的,所以我們要把他換成浮點格式:

<code>data['Time'] = [float(i) for i in data[0].str.split('\\t').str[0]]/<code>

一行代碼就搞定了,再輸出一下試試:

Python整合十萬條數據實戰(辦公必備技能)

最後把取出的‘Cd’列放入列表中:

<code>list_Cd=list(dff['cd'])/<code>

如果我們有多個此類.dat數據,可以此代碼為主體,循環取出每個文件的必要數據,再存入列表中。

小結:本文是padans在處理數據過程中的靈活運用,充分體現了它的便捷性,相比於列表運算既省時又省力,是辦公必備的python庫。

本文所述的代碼及數據已上傳至【python的爬蟲與數據分析之路】後臺,請輸入dat獲取。


分享到:


相關文章: