Pandas очень хорош в обработке данных, а не для декодирования данных, которые плохо отформатированы, как вы показали (более одного пробела в качестве разделителя, каждая вторая строка пуста).
Пуленепробиваемым способом было быфильтруйте входные данные и используйте модуль csv для анализа результата, потому что он принимает итератор в качестве входных данных (в то время как pd.read_csv
нет).
Так что это должно сделать работу:
import csv
import re
import pandas as pd
def filter(fd):
"""Cleaning filter.
Will replace sequences of more that one space with a single tab, to process the
file as as tsv, and filter out empty lines
"""
rx = re.compile('\s\s+') # the pretended delimiter
for line in fd:
line = line.strip() # clean out end of line
if len(line) == 0:
continue # filter out empty lines
yield rx.sub('\t', line) # and return non empty lines properly delimited
df = pd.DataFrame(list(csv.reader(filter(open('infile.txt'), delimiter='\t')))
print(df)
выдаст:
0 1 2 ... 4 5 6
0 945 21/01/2019 -12,47 ... 10,97000 IN GBP 1,13674 %
1 945 21/01/2019 -14,47 ... 10,97000 IN GBP 1,13674 %
[2 rows x 7 columns]