[英]How to create a Pandas df from a haphazard .dat file?
我有一個看起來像這樣的 .dat 文件。
6.74E+01 "methane" "74-82-8" "L"
5.06E+01 "ethane" "74-84-0" "L"
7.16E+01 "propane" "74-98-6" "L"
9.59E+01 "butane" "106-97-8" "L"
1.20E+02 "2-methylpropane" "75-28-5" "L"
3.73E+02 "dimethylpropane" "463-82-1" "L"
1.25E+02 "pentane" "109-66-0" "L"
This.dat 文件似乎是隨意創建的。 據我所知,這些列由不同數量的空格分隔。 在文件的下方,一些行還有一個額外的注釋列。 我需要將其讀入 Pandas dataframe。 我努力了...
raw = pd.read_table(r'FILE PATH')
raw.columns = ['Value', 'Name', 'Numbers', 'Letter']
然后引發錯誤說“發生異常:ValueError 長度不匹配:預期軸有 1 個元素,新值有 4 個元素”
我期待一個錯誤,但這使它看起來只有 1 列。 我完全不知所措,我希望有人能提供幫助。 謝謝
編輯:額外的列有一個分隔空間。
1.01E-02 "2,3-benzindene" "86-73-7" "M" ! fluorene
假設列是由空格定義的,您可以使用 read_table 的read_table
delim_whitespace=True
參數。
我假設該文件不包含 header 行。 通過names
參數指定列名,您可以避免 a) 第一行被解釋為 header 行和 b) 解析器被“額外列”混淆。
raw = pd.read_table(filename, delim_whitespace=True,
names=['Value', 'Name', 'Numbers', 'Letter'])
print(raw)
:
Value Name Numbers Letter
0 67.4000 methane 74-82-8 L
1 50.6000 ethane 74-84-0 L
2 71.6000 propane 74-98-6 L
3 95.9000 butane 106-97-8 L
4 120.0000 2-methylpropane 75-28-5 L
5 373.0000 dimethylpropane 463-82-1 L
6 125.0000 pentane 109-66-0 L
7 0.0101 2,3-benzindene 86-73-7 M
您可以嘗試打開文件並手動加載數據。 我正在使用標准的shlex
模塊來擺脫引號:
import shlex
import pandas as pd
data = []
with open('your_file.dat', 'r') as f_in:
for line in f_in:
line = line.strip()
if not line:
continue
data.append(shlex.split(line)[:4])
df = pd.DataFrame(data, columns=['Value', 'Name', 'Numbers', 'Letter'])
print(df)
印刷:
Value Name Numbers Letter
0 6.74E+01 methane 74-82-8 L
1 5.06E+01 ethane 74-84-0 L
2 7.16E+01 propane 74-98-6 L
3 9.59E+01 butane 106-97-8 L
4 1.20E+02 2-methylpropane 75-28-5 L
5 3.73E+02 dimethylpropane 463-82-1 L
6 1.25E+02 pentane 2 109-66-0 L
7 1.01E-02 2,3-benzindene 86-73-7 M
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.