Je lis un certain nombre de fichiers, avec des en-têtes de longueur non fixe inclus, et je ne sais pas comment sauter la "partie d'en-tête" jusqu'à ce que les données d'intérêt apparaissent. Le contenu du fichier ressemble à ci-dessous, je suis toujours intéressé par le contenu après la ligne "Measurement values:" puis-je utiliser l'argument skiprows de read_csv de panda, combiné avec une chaîne de recherche, ou similaire, éliminer la partie d'en-tête?

Toutes les contributions sont les bienvenues :-)

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 
.
.
1
opprud 11 avril 2018 à 14:19

3 réponses

Meilleure réponse

Je ne suis pas sûr que ce soit la bonne approche.

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)

Sortie:

  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  

Il devrait y avoir une solution sans lire le fichier deux fois.

1
Rakesh 11 avril 2018 à 11:32

Très similaire à la réponse de Rakesh mais sans lire le fichier entier juste pour trouver la ligne avec "Valeurs de mesure:"

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)
1
James Elderfield 11 avril 2018 à 12:29

J'ai utilisé ci-dessous pour sauter la première ligne lors de la lecture d'Excel, vous pouvez faire de même pour le fichier CSV. df = pandas.read_excel(excelFile, header=2)

0
avinashse 11 avril 2018 à 11:30