чтение текстового файла с необычным разделителем для панды - PullRequest
1 голос
/ 12 февраля 2020

У меня есть текстовый файл, который выглядит следующим образом:

Hypothesis:

drink

Reference:

Drake
WER:

100.0

Time:

2.416645050048828

"---------------------------"

Hypothesis:

Ed Sheeran

Reference:

Ed Sheeran

WER:

0.0

Time:

2.854194164276123

Когда я пытаюсь прочитать его как panda.DataFrame с ["Hypothesis", "Reference","WER","Time"] в качестве столбцов, он возвращает ошибку.

Я пробовал:

txt= pd.read_csv("/home/kolagaza/Desktop/IAIS_en.txt", sep="---------------------------", header = None, engine='python')

data.columns = ["Hypothesis", "Reference","WER","Time"]

1 Ответ

0 голосов
/ 12 февраля 2020

Я не думаю, что вы сможете прочитать этот текстовый файл непосредственно в pandas DataFrame без предварительной обработки. Одним из способов было бы преобразовать ваш ввод в формат pandas records, то есть список словарей, например, так:

[{'Hypothesis': 'drink', 'Reference': 'Drake', 'WER': '100.0', 'Time': '2.416645050048828'},
 {'Hypothesis': 'Ed Sheeran','Reference': 'Ed Sheeran', 'WER': '0.0', 'Time': '2.854194164276123'}]

Я попробовал следующий код, и он работает для меня (я скопировал ваш пример текста файл):

import pandas as pd

records = []
with open ("/home/kolagaza/Desktop/IAIS_en.txt", "r") as fh:
    # remove blank lines and whitespaces
    lines = [line.strip() for line in fh.readlines() if line != "\n"]
    # this next line creates a list where each element will represent one line in the final dataframe
    lines = ",".join(lines).replace(':,', ':').split('"---------------------------"')
    # now convert each line into a record
    for line in lines:
        record = {}
        for keyval in line.split(','):
            if len(keyval) > 0:
                key, val = keyval.split(':')
                record[key] = val
        records.append(record)

df = pd.DataFrame(records)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...