#python #python-3.x #pandas
Вопрос:
У меня есть файл .csv, но он действительно содержит 5 отдельных файлов CSV, и это вызывает у меня некоторые проблемы.
В настоящее время я пытаюсь прочитать файл следующим образом: data = pd.read_csv("./PA_Logs/summary.csv", skiprows=1)
Но это приводит к ошибке, в которой говорится, что ожидаемые поля не совпадают с количеством присутствующих полей, что имеет смысл, поскольку в CSV-файлах другое количество полей.
Я также пробовал: data = pd.read_csv("./PA_Logs/summary.csv", skiprows=[1,9:])
В попытке просто получить первую таблицу, но я получаю синтаксическую ошибку.
Я бы хотел либо прочитать CSV в виде 5 разных файлов, по одному для верхнего раздела и по одному для каждого из нижних разделов.
Этот файл создан другим программным обеспечением, которое нельзя изменить, поэтому я ничего не могу сделать со структурой файла.
Структура файла:
RUN_ID_HERE Level,Yield,Projected Yield,Aligned,Error Rate,Intensity C1,%gt;=Q30 Read 1,1.31,1.31,23.92,1.40,170,91.09 Read 2 (I),0.12,0.12,0.00,nan,396,61.56 Read 3 (I),0.12,0.12,0.00,nan,319,91.23 Read 4,2.01,2.01,26.34,2.08,145,88.46 Total,8.00,8.00,24.12,1.65,274,81.46 Read 1 Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing slope/offset,Prephasing slope/offset,Reads,Reads PF,%gt;=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1 1,-,38,537 /- 10,95.79 /- 0.52,0.156 / 0.141,nan / nan,nan / nan,13.59,13.02,93.19,3.91,300,29.32 /- 1.21,1.80 /- 0.05,0.83 /- 0.12,0.51 /- 0.06,0.48 /- 0.10,174 /- 16 1,1,19,537 /- 11,96.18 /- 0.34,0.128 / 0.149,nan / nan,nan / nan,6.84,6.58,92.93,1.97,-,30.31 /- 0.73,1.80 /- 0.05,0.77 /- 0.11,0.47 /- 0.06,0.44 /- 0.05,189 /- 3 1,2,19,537 /- 10,95.41 /- 0.35,0.184 / 0.134,nan / nan,nan / nan,6.75,6.44,93.46,1.93,-,28.32 /- 0.63,1.80 /- 0.06,0.90 /- 0.09,0.54 /- 0.05,0.52 /- 0.12,159 /- 6 Read 2 (I) Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing slope/offset,Prephasing slope/offset,Reads,Reads PF,%gt;=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1 1,-,38,537 /- 10,95.79 /- 0.52,0.000 / 0.000,nan / nan,nan / nan,13.59,13.02,68.50,0.12,0,nan /- nan,nan /- nan,nan /- nan,nan /- nan,nan /- nan,456 /- 40 1,1,19,537 /- 11,96.18 /- 0.34,nan / nan,nan / nan,nan / nan,6.84,6.58,68.42,0.06,-,nan /- nan,nan /- nan,nan /- nan,nan /- nan,nan /- nan,495 /- 9 1,2,19,537 /- 10,95.41 /- 0.35,nan / nan,nan / nan,nan / nan,6.75,6.44,68.58,0.06,-,nan /- nan,nan /- nan,nan /- nan,nan /- nan,nan /- nan,417 /- 3 Read 3 (I) Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing slope/offset,Prephasing slope/offset,Reads,Reads PF,%gt;=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1 1,-,38,537 /- 10,95.79 /- 0.52,0.000 / 0.000,nan / nan,nan / nan,13.59,13.02,95.73,0.12,0,nan /- nan,nan /- nan,nan /- nan,nan /- nan,nan /- nan,359 /- 23 1,1,19,537 /- 11,96.18 /- 0.34,nan / nan,nan / nan,nan / nan,6.84,6.58,95.55,0.06,-,nan /- nan,nan /- nan,nan /- nan,nan /- nan,nan /- nan,381 /- 7 1,2,19,537 /- 10,95.41 /- 0.35,nan / nan,nan / nan,nan / nan,6.75,6.44,95.91,0.06,-,nan /- nan,nan /- nan,nan /- nan,nan /- nan,nan /- nan,336 /- 4 Read 4 Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing slope/offset,Prephasing slope/offset,Reads,Reads PF,%gt;=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1 1,-,38,537 /- 10,95.79 /- 0.52,0.116 / 0.031,nan / nan,nan / nan,13.59,13.02,83.46,3.91,300,28.12 /- 1.59,2.14 /- 0.14,0.98 /- 0.23,0.67 /- 0.11,0.61 /- 0.08,171 /- 13 1,1,19,537 /- 11,96.18 /- 0.34,0.117 / 0.029,nan / nan,nan / nan,6.84,6.58,83.30,1.97,-,28.88 /- 1.92,2.13 /- 0.15,0.97 /- 0.33,0.65 /- 0.15,0.60 /- 0.11,184 /- 4 1,2,19,537 /- 10,95.41 /- 0.35,0.114 / 0.033,nan / nan,nan / nan,6.75,6.44,83.62,1.93,-,27.37 /- 0.55,2.15 /- 0.12,0.99 /- 0.07,0.68 /- 0.03,0.62 /- 0.03,158 /- 2 Extracted: 622 Called: 622 Scored: 622
Комментарии:
1. Похоже, что на самом деле существует 5 csv-файлов в there…am Я прав?
2. @user17242583, а также некоторые строки верхнего и 3 нижних колонтитула 🙂
3. Вы правы. Отредактировал исходный пост, чтобы отразить. Я могу игнорировать нижний колонтитул, так что не беспокойтесь об этом.
4. Вам нужно будет написать свой собственный синтаксический анализатор. В вашем вопросе недостаточно информации — например, вы ожидаете, что всегда будет 4
Read
блока или может быть разное количество блоков, всегда по 5 строк на блок (чтение #, заголовок, 3 строки данных) и т. Д.5. Вам нужно написать свой собственный синтаксический анализатор, чтобы собирать строки по частям и передавать их в csv-анализатор. Похоже, что первая таблица заканчивается пустой строкой, а в первом столбце указаны имена ключей для поиска начала каждой дополнительной таблицы. Если анализатор csv не принимает строку, вы можете использовать
io.StringIO
ее, чтобы она выглядела как файл.
Ответ №1:
Этот код будет считывать файл строка за строкой, извлекать из него все отдельные CSV-файлы и добавлять их в список CSV-файлов.
from io import StringIO with open('file.txt') as f: lines = [l.strip() for l in f.readlines()] csvs = [] csv = [] for line in lines: if ',' not in line: csvs.append(csv) csv = [] else: csv.append(line) csvs = ['n'.join(csv) for csv in csvs if len(csv) gt; 0] dfs = [pd.read_csv(StringIO(csv)) for csv in csvs]
Тест:
gt;gt;gt; len(dfs) 5 gt;gt;gt; dfs[0] Level Yield Projected Yield Aligned Error Rate Intensity C1 %gt;=Q30 0 Read 1 1.31 1.31 23.92 1.40 170 91.09 1 Read 2 (I) 0.12 0.12 0.00 NaN 396 61.56 2 Read 3 (I) 0.12 0.12 0.00 NaN 319 91.23 3 Read 4 2.01 2.01 26.34 2.08 145 88.46 4 Total 8.00 8.00 24.12 1.65 274 81.46 gt;gt;gt; dfs[-1] Lane Surface Tiles Density Cluster PF Legacy Phasing/Prephasing Rate Phasing slope/offset ... Cycles Error Aligned Error Error (35) Error (75) Error (100) Intensity C1 0 1 - 38 537 /- 10 95.79 /- 0.52 0.116 / 0.031 nan / nan ... 300 28.12 /- 1.59 2.14 /- 0.14 0.98 /- 0.23 0.67 /- 0.11 0.61 /- 0.08 171 /- 13 1 1 1 19 537 /- 11 96.18 /- 0.34 0.117 / 0.029 nan / nan ... - 28.88 /- 1.92 2.13 /- 0.15 0.97 /- 0.33 0.65 /- 0.15 0.60 /- 0.11 184 /- 4 2 1 2 19 537 /- 10 95.41 /- 0.35 0.114 / 0.033 nan / nan ... - 27.37 /- 0.55 2.15 /- 0.12 0.99 /- 0.07 0.68 /- 0.03 0.62 /- 0.03 158 /- 2