「Python乾貨」3秒分200萬數據,想咋分就咋分!

曾經有一項工作內容,就是把一份文件按要求分成N份,然後再發給不同的人,作為EXCEL高手,這當然難不倒我,用“篩選”把所有要求的內容篩選出來,然後另存一份就OK了。

直到有一天,我遇到了一個200多萬行18列的數據,要根據城市的不同,分為10份數據,其中有一份數據達到120多萬行,如下圖所示,把哥整了一個下午:

「Python乾貨」3秒分200萬數據,想咋分就咋分!

EXCEL 分數據

鬼知道那天我是怎麼把這個數據處理完的!

雖然碰到這麼大的數據的機率不是很大,但一旦遇到,你沒有數據庫,沒有其它專業軟件,很難完成,而且,像以前那樣用EXCEL分數據,確實太累了,時間長了,人受不了,人的大腦是用來做創造性工作的,不是用來做低級重複勞動的,低級重複勞動還是交給電腦來完成吧。

這個內容用python處理如果不用庫的話,會比較麻煩。前幾次的分享都是不用任何庫的,只用python自帶的函數或方法來實現,看到下面有很多朋友評論,可以用Pandas庫,一行很簡單的代碼就可以搞定,今天咱也用用pandas庫,畢竟,用起來實在太簡單方便了。

基本思路是通過導入pandas庫,將原數據讀入,通過DataFrame的groupby()進行分組,最後for循環輸出目標數據,源代碼如下:

# -*- coding: utf-8 -*-

"""

將CSV文件按某列的關鍵字切割輸出以關鍵字命名的CSV文件,支持中文字符。

python版本:3.6.4

需安裝Panads

實測227萬條CSV數據,按列關鍵字分為10個CSV文件用時約3秒。

"""

import pandas as pd # 導入pandas庫。

f = pd.read_csv('test1.csv', encoding='gbk') # 讀取目標CSV文件,示例文件'test1.csv'。

groups = f.groupby(f[u'城市']) # 需要按列切割的列名

# 按列關鍵字進行切割輸出。

for group in groups:

group[1].to_csv(str(group[0]) + '.csv', index=False, encoding='gbk')

print ("按列關鍵字分CSV完畢,請到同文件夾下查看輸出的文件")

下面是實際輸出效果:

「Python乾貨」3秒分200萬數據,想咋分就咋分!

python 分數據

實測有一次200多萬條數據,分成10份,總共用了不到3秒,機器是32位2G內存的windows電腦。

「Python乾貨」3秒分200萬數據,想咋分就咋分!

python 數據分割

這個代碼適合有類似的需求的朋友,可以大大減輕工作量。

後來在工作中,除了需要分數據外,還需要把分好的數據分給不同的人。怎樣才能通過郵件把這些分好的數據自動發送給不同的人呢?其實經過一些簡單的代碼修改就可以了,如果評論過百,我會把代碼公佈出來。


分享到:


相關文章: