編程嬰兒又在編程。
男朋友又讓我給他處理數據,其中一個數據大小有10g以上,我還需要把這個數據和其他數據進行匹配,然后分組統計得到一些數據。
之前簡簡單單用一下read_csv不能打開這么大的數據,我在尋找辦法。
因為要做匹配,所以我本來打算模塊化把數據寫進來之后,然后再合並起來做。但是總是不行,報錯。最后可能要先分組處理完,再合並。因為這個數據里應該有很多不用的數據,還是有希望。
中間看到有人說可以用dask包處理很大的文件,很輕松。我看了一下,我覺得就算我讀入了,我后面很難操作,我還沒到能很快學會一個新包的程度。我還是先好好把pandas用好吧。哭了。
想和男朋友討論一下,怎么弄這個事,他說他不管過程,只要結果。我就是想和他說一說,然后把自己的思路梳理清楚,他都不聽。他說他老師和他交代這些事,也從來不管過程,給他結果就好了。
怎么這樣,我一直覺得我和他的學術地位是平行的,我們是合作關系,現在他都騎到我頭上了。缺罵。
1.打開tsv文件
tsv文件其實就是用tab做分隔符的文件
uspatentcitation=pd.read_csv('F:/1/uspatentcitation.tsv', sep='\t', nrows=2,usecols=['patent_id', 'citation_id', 'date'])
和csv唯一的區別就是sep參數
nrows=2 #就是打開前兩行看一下,我想知道這個數據里有什么指標,是否有一些指標不需要。
usecols=['patent_id', 'citation_id', 'date'] #只取其中三列看看
參考:https://blog.csdn.net/shuihupo/article/details/85283240#pandas%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E
2.看看文件有多少行
我已經試了一些方法,都不能打開這個大文件,我決定先看一眼這個文件有多少行。對后面模塊化處理文件心里有個數。
with open('F:/1/uspatentcitation.tsv', 'rb') as f: print(len(f.readlines()))
‘rb’是因為之前用‘r’出現以下編碼錯誤:“UnicodeDecodeError: 'gbk' codec can't decode byte 0xb2 in position 6311: illegal multibyte sequence”
但是沒想到這個數據這么頑劣,想看看有多少行都不行,給我報‘MemoryError’
煩死人。
換了個辦法,沒想到看看有多少行,也得模塊。
path1 = 'F:/1/uspatentcitation.tsv' file1 = open(path1) uspatentcitation = pd.read_csv(path1, sep='\t',usecols=['patent_id', 'citation_id', 'date'], iterator=True) count = 0 loop = True while loop: try: user = uspatentcitation.get_chunk(100000) count += user.shape[0] except StopIteration: break print(count)
結果:108913836
一億條數據,無語。
不干了,明天再說吧。
3.決定模塊化匹配,並統計