曾經有一項工作內容,就是把一份文件按要求分成N份,然後再發給不同的人,作為EXCEL高手,這當然難不倒我,用“篩選”把所有要求的內容篩選出來,然後另存一份就OK了。
直到有一天,我遇到了一個200多萬行18列的數據,要根據城市的不同,分為10份數據,其中有一份數據達到120多萬行,如下圖所示,把哥整了一個下午:
鬼知道那天我是怎麼把這個數據處理完的!
雖然碰到這麼大的數據的機率不是很大,但一旦遇到,你沒有數據庫,沒有其它專業軟件,很難完成,而且,像以前那樣用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完畢,請到同文件夾下查看輸出的文件")
下面是實際輸出效果:
實測有一次200多萬條數據,分成10份,總共用了不到3秒,機器是32位2G內存的windows電腦。
這個代碼適合有類似的需求的朋友,可以大大減輕工作量。
後來在工作中,除了需要分數據外,還需要把分好的數據分給不同的人。怎樣才能通過郵件把這些分好的數據自動發送給不同的人呢?其實經過一些簡單的代碼修改就可以了,如果評論過百,我會把代碼公佈出來。
閱讀更多 aovs 的文章