我試圖找出一種方法來導入一個.txt文件,理想地使用python 3.5作爲數據框(pandas)。我用不同的數據做了幾次。這個文件有幾千例/實例,這需要每13線之後是一個空行:每個實例使用python導入多個行的txt文件
Cat1: text
…
Cat13: text
Cat1: text
…
Cat13: text …
使用下面的代碼,我可以訪問每一行,並創建一個新的載體每個實例(不幸的列向量而不是行向量,它可以被添加到一個新的數據幀):
import codecs
import pandas as pd
with codecs.open(‚file.txt', 'r',encoding='utf-8', errors='ignore') as f:
lines = f.readlines()
L = list(lines[i] for i in range(14))
se = pd.Series(L[:13])
df = pd.DataFrame([], columns=('Cat1’,…,’Cat13‘))
df['new_row'] = se.values
我正在尋找一個基本的數據幀(實例×13),以「CAT1」,...,「Cat13」爲列,實例作爲行。
Cat1 Cat2 ... Cat13
text text text
text text text
...
有沒有一個簡單的解決這個問題,甚至是另一個包加載這樣的文件?
編輯: 不是很確定我在找什麼。最後能夠使用this thread中提到的itertools.groupby來解決這個問題。
import itertools
import codecs
import pandas as pd
def group_separator(line):
return line=='\n'
with codecs.open('file.txt', 'r',encoding='utf-8', errors='ignore') as f:
lines = f.readlines()
cols = ('Cat1',...,'Cat13')
data = []
for (key, group) in itertools.groupby(lines, group_separator):
if key:
next(group).strip()
else:
tem_data = [i.strip() for i in group]
tem_data = filter(lambda l: l != '', tem_data)
tem_data = [i.split(':',1) for i in tem_data]
tem_data = [i[1].strip() for i in tem_data]
if len(tem_data) == 13:
data.append(tem_data)
df = pd.DataFrame(data, columns=cols)
能否請您編輯示例數據顯示出一些完整的情況和預期的輸出? – zipa
而且更加地道。 – GiantsLoveDeathMetal
@tsc檢查我的答案 – MedAli