Python新手的數(shù)據(jù)批量處理教程(TXT文件)

最近想用python批量處理數(shù)據(jù),把自己網(wǎng)上找答案的過程整理了一下,希望對(duì)大家有用。
問題:

一個(gè)文件夾中有38個(gè)txt文件,這38個(gè)txt的命名各不相同,要把這38個(gè)txt文件中的數(shù)據(jù)整合到一個(gè)txt中。

思路:

獲取所有txt文件的名稱、路徑,然后用for循環(huán)遍歷每個(gè)txt文件,進(jìn)行處理。最后將處理后的數(shù)據(jù)合并。

先看下總體代碼,后面有具體解釋。

import pandas as pd 
import numpy as np 
import os
os.getcwd()  
os.chdir('/Users/Heihei/Desktop/EX2data/data')  
path = '/Users/Heihei/Desktop/EX2data/data'
os.listdir(path)

datalist = []
for i in os.listdir(path):
    if os.path.splitext(i)[1] == '.txt':   
        datalist.append(i)

df = pd.DataFrame()
for txt in datalist:
    data_path = os.path.join(path,txt)  
    df_txt = pd.read_table(data_path,index_col = False) 
    df_txt['sub_n'] = txt[:2]   
    df_txt_sx = df_txt[df_txt['split'].isin([1,2])]  
    df = pd.concat([df,df_txt_sx],axis=0, ignore_index=True) 

df.head(5) 
df.tail(5)  
df.shape  
df.isnull().sum()  
df.duplicated().sum() 

df.to_csv('/Users/Heihei/Desktop/EX2data/data/Total_data',index=False)

代碼解釋

1. 獲取路徑

#載入需要的模塊
import pandas as pd 
import numpy as np 
import os
os.getcwd()  #獲取當(dāng)前工作路徑,查看是否是自己的目標(biāo)路徑
os.chdir('/Users/Heihei/Desktop/EX2data/data')  #如果不是,改到目標(biāo)路徑
path = '/Users/Heihei/Desktop/EX2data/data'
os.listdir(path) #查看目標(biāo)路徑下有哪些數(shù)據(jù)

結(jié)果顯示(中間有很多了txt我把它省略了):

['.DS_Store',
'01lwj.txt',
......
'38lym.txt']

由上面可以看到,出現(xiàn)了一個(gè)“ .DS_Store”文件。如果我們直接用os.listdir(path)進(jìn)行循環(huán),會(huì)報(bào)錯(cuò)。

“ .DS_Store” 文件是Mac OS系統(tǒng)的Finder 用來存儲(chǔ)這個(gè)文件夾的顯示屬性的:比如文件圖標(biāo)的擺放位置。具體可以看這篇文章:http://mini.eastday.com/mobile/180317092251931.html#。 因此。我們需要重新建立一個(gè)不包含該文件的list,新的list只含有txt數(shù)據(jù)。

datalist = []
for i in os.listdir(path):
    if os.path.splitext(i)[1] == '.txt':     #選取后綴為txt的文件加入datalist
        datalist.append(i)
datalist  #查看datalist

os.path.splitext
把文件分為文件名和擴(kuò)展名。比如os.path.splitext(a.txt)的結(jié)果為a 以及 .txt 。因此,os.path.splitext(i)[1]的意思就是取出文件的后綴名。
除了該函數(shù)外,還有一個(gè)os.path.split 的函數(shù),該函數(shù)用來把路徑分為文件名與文件目錄,比如“/user/heihei/data.txt” ,經(jīng)過作用后可以被分為“/user/heihei”和 “data.txt”

另外,注意python中的順序。list[x:y] 是從第“x+1”個(gè)數(shù)(因?yàn)閜ython的第一個(gè)數(shù)是0)開始,直到y(tǒng)結(jié)束(不包含y)。如list = [0,1,2] , list[1:2]的結(jié)果是[1]。

2. 循環(huán)合并數(shù)據(jù)

df = pd.DataFrame()
for txt in datalist:
    data_path = os.path.join(path,txt)    #列出path路徑下目標(biāo)文件的絕對(duì)路徑,將其賦值給data_path
    df_txt = pd.read_table(data_path,index_col = False) #讀取目標(biāo)txt文件,不把原Data第一列作為索引
    df_txt['sub_n'] = txt[:2]    #取出前面的數(shù)值,并賦值給sub_n這一列(合并后我需要知道哪些數(shù)據(jù)來自哪個(gè)文件)
    df_txt_sx = df_txt[df_txt['split'].isin([1,2])]  #用isin方法進(jìn)行數(shù)據(jù)篩選(我的數(shù)據(jù)中split一列有3個(gè)值,我只需要改列值為1,2的行,其他行不需要)
    df = pd.concat([df,df_txt_sx],axis=0, ignore_index=True)     #(將篩選后的數(shù)據(jù)加到df框中。axis=0表示上下合并,axis=1表示左右合并,ignore_index=True表示忽略原來索引。除了concat函數(shù)外,也可以用df.append實(shí)現(xiàn),但是還要改索引,比concat方法會(huì)麻煩點(diǎn))   

3. 檢查合并完的數(shù)據(jù)

df.head(5)  #檢查最開始5行數(shù)據(jù)
df.tail(5)   #檢查最后5行數(shù)據(jù)
df.shape   #查看數(shù)據(jù)框行列是否和預(yù)期一樣
df.isnull().sum()  #查看是否有缺失值
df.duplicated().sum() 查看是否有重復(fù)值

4. 保存數(shù)據(jù)

df.to_csv('/Users/Heihei/Desktop/EX2data/data/Total_data',index=False)
# index=False 表示不保存索引數(shù)據(jù)
#之后如果要讀取的話,直接df.read_csv('Total_data', index_col=False)就能得到 df框。

公眾號(hào): 爾冬禾(PsyHeheihei),文章更新速度比這里稍微快一點(diǎn),主要跟數(shù)據(jù)分析相關(guān)內(nèi)容和一些個(gè)人思考。歡迎交流


參考資料:
1.Python讀取/批量讀取文件
2.python中split()、os.path.split()函數(shù)用法
3.【python】如何批量讀取文件夾的所有文件數(shù)據(jù),os模塊與open函數(shù)結(jié)合使用實(shí)例
4.python中pandas.DataFrame排除特定行方法示例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,694評(píng)論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,026評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,193評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,668評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,846評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,394評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,635評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容