Python читает файл csv и пропускает часть заголовка нефиксированной длины

Я читаю несколько файлов с заголовками не фиксированной длины и не знаю, как можно пропустить «часть заголовка» до тех пор, пока не появятся интересующие данные. Содержимое файла выглядит так, как показано ниже, меня всегда интересует содержимое после строки "Measurement values:", могу ли я каким-то образом использовать аргумент read_csv panda skiprows в сочетании со строкой поиска или аналогичным образом, чтобы отсеять часть заголовка?

Любые материалы приветствуются :-)

Data of the Experiment
Test started: Wed Mar 07 08:10:32 CET 2018
Time     Revolutions     Axial Force     Radial Force
0        0        0        0
10        3000        0        4000
172800        3000        0        4000
172800        2000        0        4000
180000        2000        0        4000
237600        3000        0        22000
237600        2000        0        22000
244800        2000        0        22000
244800        1000        0        22000
252000        1000        0        22000
252000        3000        0        4000
259200        3000        0        4000
Critical Temperature 1: 110
Critical Temperature 2: 120
Critical Temperature 3: 120
Critical Temperature 4: 110
Critical Vibration level: 3500
Critical Torque: 7000
Measurement values:
Time:   Seconds elapsed [s] Torque [Nm] Speed [1/s] 
20180307081032: 210025.02   5.25    0.00    
20180307081033: 210025.98   17.50   3000.00 
20180307081034: 210026.97   1688.75 3000.00 
.
.

вы можете просто читать ваш файл построчно и ничего не делать, пока line.startswith("Measurement values:") не вернет True. Из следующей строки вы можете добавить строки в свой фрейм данных.

alec_djinn 11.04.2018 13:31
1
1
363
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я использовал ниже, чтобы пропустить первую строку при чтении Excel, вы можете сделать то же самое для файла csv. df = pandas.read_excel(excelFile, header=2)

Ответ принят как подходящий

Я не уверен, что это правильный подход.

import pandas as pd
df = pd.read_csv(r"filename.csv")
lineNumber = 0
for i, v in enumerate(df.to_string(index=False).split("\n"), 1):
    if "Measurement values" in v:
        lineNumber = i                          #Find line number of "Measurement values"
        break

df = pd.read_csv(r"filename.csv", skiprows=lineNumber)    #Read file again with lineNumber 
print(df)

Выход:

  Time:   Seconds elapsed [s] Torque [Nm] Speed [1/s] 
0       20180307081032: 210025.02   5.25    0.00      
1       20180307081033: 210025.98   17.50   3000.00   
2       20180307081034: 210026.97   1688.75 3000.00  

Должно быть решение, не читая файл дважды.

Очень похоже на ответ Ракеша, но без чтения всего файла, чтобы найти строку с «Значения измерений:»

import pandas as pd

file_name = r"filename.csv"

line_number = -1

with open(file_name, "r") as in_file:
    for i, line in enumerate(in_file, 1):
        if line.startswith("Measurement values:"):
            lineNumber = i
            break

if line_number == -1:
    raise RuntimeError("Could not find end of header")

df = pd.read_csv(file_name, skiprows = line_number)
print(df)

Другие вопросы по теме