今天總結(jié)一下最近工作中遇到的小知識(shí)點(diǎn)和一些小坑:
關(guān)于文件操作方面:
json文件的操作最近工作也經(jīng)常用颜矿,關(guān)于文件讀寫操作py2中出問題最多的地方就在于編碼問題洗贰,不再總結(jié)找岖,數(shù)據(jù)分析三劍客:numpy,pandas,matplotlab,這里寫下pandas的一些用法
pandas是非常實(shí)用的一個(gè)庫(kù),他能讀取各種格式的文件并進(jìn)行操作:
在工作中原來有兩個(gè)文件敛滋,兩個(gè)文件大概有二百四十萬和幾萬的數(shù)據(jù)许布,要在大文件里把小文件有的ID找出來,并生成新的文件绎晃,用常規(guī)的循環(huán)嵌套方法蜜唾,即使開了多進(jìn)程,效率也是極低的(在公司大概跑一整天還容易出問題)庶艾,但是用pandas的方法就大大提高了效率
一袁余、pandas.merge():首先看一下它里面提供的參數(shù)
left 參與合并的左側(cè)DataFrame
right 參與合并的右側(cè)DataFrame
how 連接方式:‘inner’(默認(rèn));還有咱揍,‘outer’颖榜、‘left’、‘right’(類似mysql數(shù)據(jù)庫(kù)的主從表查詢)
on 用于連接的列名,必須同時(shí)存在于左右兩個(gè)DataFrame對(duì)象中掩完,如果位指定蟹地,則以left和right列名的交集作為連接鍵
left_on 左側(cè)DataFarme中用作連接鍵的列
right_on 右側(cè)DataFarme中用作連接鍵的列
left_index 將左側(cè)的行索引用作其連接鍵
right_index 將右側(cè)的行索引用作其連接鍵
sort 根據(jù)連接鍵對(duì)合并后的數(shù)據(jù)進(jìn)行排序,默認(rèn)為True藤为。有時(shí)在處理大數(shù)據(jù)集時(shí)怪与,禁用該選項(xiàng)可獲得更好的性能
suffixes 字符串值元組,用于追加到重疊列名的末尾缅疟,默認(rèn)為(‘_x’,‘_y’).例如分别,左右兩個(gè)DataFrame對(duì)象都有‘data’,則結(jié)果中就會(huì)出現(xiàn)‘data_x’存淫,‘data_y’
用這個(gè)方法針對(duì)上面那個(gè)問題耘斩,先把兩個(gè)文件讀出來,pd.merge("table1","table2",on="entity_id")
how用默認(rèn)的內(nèi)連接即可桅咆,這個(gè)方法不到一分鐘即可完成任務(wù)括授,可見,工欲善其事岩饼,必先利其器荚虚,針對(duì)問題選擇一個(gè)好的方法是多么重要。
如果想根據(jù)兩個(gè)字段提取信息的話在on=“”里面用一個(gè)列表即可籍茧,非常強(qiáng)大
二版述、’對(duì)于數(shù)據(jù)的去重,pd.DataFrame.drop_duplicates()即可寞冯,里面填要根據(jù)那個(gè)字段去重的字段
subset :? 用來指定特定的列渴析,默認(rèn)所有列
keep : {‘first’, ‘last’, False}, 默認(rèn) ‘first’,刪除重復(fù)項(xiàng)并保留第一次出現(xiàn)的項(xiàng)
inplace : boolean, 默認(rèn) False吮龄,是直接在原來數(shù)據(jù)上修改還是保留一個(gè)副本
三俭茧、在操作完數(shù)據(jù)以后,可以用pandas.to_...將結(jié)果保存至任意格式的文件漓帚,上面能讀多少格式母债,這里就能寫多少格式,很強(qiáng)大胰默,需要注意的是在寫入json格式的時(shí)候场斑,注意參數(shù)orient
如果是Series轉(zhuǎn)json,默認(rèn)的orient是’index’牵署,orient可選參數(shù)有 {‘split’,’records’,’index’}
如果是DataFrame轉(zhuǎn)json漏隐,默認(rèn)的orient是’columns’,orient可選參數(shù)有 {‘split’,’records’,’index’,’columns’,’values’}
json的格式如下
split奴迅,樣式為 {index -> [index], columns -> [columns], data -> [values]}
records青责,樣式為[{column -> value}, … , {column -> value}]
index 挺据,樣式為 {index -> {column -> value}}
columns,樣式為 {index -> {column -> value}}
在轉(zhuǎn)成json的時(shí)候一般按行脖隶,即orient=‘index’扁耐,但這樣他會(huì)生成一個(gè)自增索引,這個(gè)不希望被看到产阱,這時(shí)候讀出她來婉称,創(chuàng)建新的json文件存入有自增索引的文件的value即可。
下次繼續(xù)總結(jié)( ^_^ )? ? ??
2019年2月24日16:32:48