#python #pandas #csv
Вопрос:
Я пытаюсь преобразовать данные из текстового файла в csv в соответствующие имена столбцов.
Это пример текстового файла
Run 1 Tbb= 20 C Volt=3.093 Tamb= 20.13 C 1b2JTriTemp 1.0.5 AD Averaged 00f2(mV), 0001, 0001, 0001, 0001, 0001, 0001, 0000, RAW Values 00f2(xx), FFFF, FFFF, FFFF, FFFF, FFFF, FFFF, AD Averaged 0132(mV), 0001, 0001, 0004, 3061, 0002, 0001, 0000, RAW Values 0132(xx), 0000, 0002, 0006, 0D0F, 0003, 0000,
Когда я запускаю этот код:
import pandas as pd with open("sample data as comma.txt", "r") as f: data = f.readlines() with open("sample data as comma.txt", "w") as f: for line in data: if "RAW" not in line: f.write(line) df = pd.read_csv("sample data as comma.txt", delimiter=',') df.columns = ['', 'TH ', 'Vacm', 'Vout', 'Bat mon', 'TH-', 'Vbat2', 'Vamb', ''] df.to_csv('Sample raw data CSV.csv')
Я получаю сообщение об ошибке «панды.ошибки.Ошибка синтаксического анализа: Ошибка при маркировке данных. C ошибка: Ожидалось 1 поле в строке 8, увидел 9».
Важно отметить, что я хочу иметь возможность сохранить строку, которая определяет, какой это запуск. Например, «Запуск 1» вместе с его Tbb, Volt и Tamb. Это может быть просто в одной строке перед каждым набором данных.
Также обратите внимание, что строка выполнения должна быть отдельной строкой, а не отсортированной по столбцам.
Вот пример того, как это должно закончиться:
Любая помощь/совет были бы очень признательны, спасибо!
Комментарии:
1. CSV-файлы не имеют никакого форматирования, только простые таблицы. Вы имеете в виду, что, возможно, хотите получить его в формате Excel?
Ответ №1:
Просто проделайте здесь небольшую манипуляцию и добавьте эти «пустые» значения.
Таким образом, этот код проверяет, какое максимальное количество столбцов необходимо, а затем добавляет эти дополнительные «пустые» значения в эти строки.
import pandas as pd with open("sample data as comma.txt", "r") as f: data = f.readlines() data = [x.strip().split(',') for x in data if "RAW" not in x] max_len = max([len(i) for i in data]) for row in data: if len(row) lt; max_len: row = [''] * (max_len - len(row)) df = pd.DataFrame(data, columns = ['', 'TH ', 'Vacm', 'Vout', 'Bat mon', 'TH-', 'Vbat2', 'Vamb', ''] ) df.to_csv('Sample raw data CSV.csv', index=False)
Вывод: Из ваших выборочных данных
print(df.to_string()) TH Vacm Vout Bat mon TH- Vbat2 Vamb 0 Run 1 Tbb= 20 C Volt=3.093 Tamb= 20.13 C 1 2 1b2JTriTemp 1.0.5 3 4 5 AD Averaged 00f2(mV) 0001 0001 0001 0001 0001 0001 0000 6 AD Averaged 0132(mV) 0001 0001 0004 3061 0002 0001 0000