[英]Creating a DataFrame from a .txt file
我需要一些智慧在這里!
我正在嘗試創建一個腳本,該腳本需要兩個 (2).txt 具有相同格式的文件,將一個附加到另一個,然后從該結果文件中創建一個 DataFrame,以便我可以操作它。
這些文件是庫存結果,但它們有點混亂。
從這些文件中,我只需要產品的行,僅此而已,我正在使用:
listados = ["analisis_diferencias.txt","no_contadas.txt"]
def unir_listados(listados):
with open("df_final.txt","w+") as merge:
for item in listados:
with open(item) as readable:
for line in readable:
if line[4] in ["1","2","3","4","5","6","7","8","9"]:
merge.write(line)
結果是一個看起來很完美的 new.txt,因為它只使用有產品代碼的行。
但我就是無法使用普通的 DataFrame 或任何其他具有列的結構。
我去過的最遠的地方是使用 pd.read_table 創建一個單列 df,不知道如何分隔列上的每一行。
我嘗試用“;”替換空格所以我以后可以刪除它會生成的空列,但后來我得到了一個包含一行和超過 6k 列的巨大列表......
還嘗試用“\t”替換它們,但沒有。
pd.read_csv 方法也不起作用:
a = pd.read_csv("df_final.txt", header=None, encoding="latin-1")
ParserError: 預期第 3 行中的 18 個字段,看到 19。錯誤可能是由於使用多字符分隔符時忽略引號引起的。
我在網上看到了一個解決方案,它不是創建一個 new.txt,而是在解析 original.txt 的每一行時按值創建一個新的 df 值
但是我知道,一旦您顯示了我現在擁有的數據,應該有一個更簡單的方法。
提前感謝您提供的任何幫助。
Ps:順便說一句,將行附加到我的 new.txt 時,如果我使用 str([1,2,3,4,5,6,7,8,9]) 它會 select 每一行,因為它檢測到空字符串 char "" 在數組中。 對此有任何想法嗎?
編輯:
根據要求,我添加了一些 final.txt 行。
68.17.28 D-AA SPLIT HAIER TUNDRA AS-18 ] 0 1 1 562,00 562,000
42.50.10 Z-CAMARA INSTANT. FUJI INSTAX ] 1 3 2 111,80 55,900
54.15.88 Z-CAMARA INSTANT. FUJI INSTAX ] 2 2 0 0,00 59,900
67.05.04 A-CAMARA INSTANT. FUJI INSTAX ] 1 1 0 0,00 54,500
72.29.13 C-CAMARA INSTANT. FUJI INSTAX ] 1 1 0 0,00 121,950
21.08.75 D-MEMORIA MICRO SD ULTRA SANDI] 7 7 0 0,00 15,699
21.09.35 B-MEMORIA MICRO SD ULTRA SANDI] 16 16 0 0,00 3,616
21.09.70 D-MEMORIA MICRO SD ULTRA SANDI] 11 23 12 56,18 4,682
21.11.33 D-MEMORIA MICRO SD ULTRA SANDI] 4 4 0 0,00 7,830
23.36.92 A-MICROSD SAMSUNG EVO 32GB(MB-] 9 9 0 0,00 6,811
如果沒有文本文件的樣本,很難確定。 但你能試試:
pd.read_table("df_final.txt", sep='\s+', header=None, encoding="latin-1")
這看起來根據空格分隔 txt 文件列。
使用分隔符\s{2,}
怎么樣,在D-AA SPLIT HAIER TUNDRA AS-18 ]
只有 1 個空格。
df = pd.read_csv(file, sep='\s{2,}',header=None, engine='python')
另一種方式:
# read file with only one column
obj = pd.read_csv(file, sep='\n',header=None)[0]
def handle_row(row):
row_list = re.split(r'\s+', row)
# the first 2 columns
prt1 = ' '.join(row_list[:-5]).split(' ', maxsplit=1)
# the last 5 columns
prt2 = row_list[-5:]
return (prt1 + prt2)
df = pd.DataFrame(obj.map(handle_row).tolist())
print(df)
0 1 2 3 4 5 6
0 68.17.28 D-AA SPLIT HAIER TUNDRA AS-18 ] 0 1 1 562,00 562,000
1 42.50.10 Z-CAMARA INSTANT. FUJI INSTAX ] 1 3 2 111,80 55,900
2 54.15.88 Z-CAMARA INSTANT. FUJI INSTAX ] 2 2 0 0,00 59,900
3 67.05.04 A-CAMARA INSTANT. FUJI INSTAX ] 1 1 0 0,00 54,500
4 72.29.13 C-CAMARA INSTANT. FUJI INSTAX ] 1 1 0 0,00 121,950
5 21.08.75 D-MEMORIA MICRO SD ULTRA SANDI] 7 7 0 0,00 15,699
6 21.09.35 B-MEMORIA MICRO SD ULTRA SANDI] 16 16 0 0,00 3,616
7 21.09.70 D-MEMORIA MICRO SD ULTRA SANDI] 11 23 12 56,18 4,682
8 21.11.33 D-MEMORIA MICRO SD ULTRA SANDI] 4 4 0 0,00 7,830
9 23.36.92 A-MICROSD SAMSUNG EVO 32GB(MB-] 9 9 0 0,00 6,811
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.