pandas Python阅读csv文件,跳过非定长头部分

ogq8wdun  于 2023-03-21  发布在  Python
关注(0)|答案(4)|浏览(118)

我正在阅读一些文件,包括非固定长度的头文件,不知道如何跳过“头部分”,直到感兴趣的数据出现。文件内容如下所示,我总是对行"Measurement values:"之后的内容感兴趣。我可以使用panda的read_csvskiprows参数,结合搜索字符串,或类似的,去掉标题部分吗
欢迎任何意见:-)

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 
.
.
vzgqcmou

vzgqcmou1#

我不知道这是否正确的做法。

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

不需要两次阅读文件就应该有解决方案。

flvlnr44

flvlnr442#

与Rakesh的答案非常相似,但没有阅读整个文件,只是为了找到“测量值”行:

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)
t30tvxxf

t30tvxxf3#

我已经使用下面跳过第一行,而阅读excel,你可以做同样的csv文件. df = pandas.read_excel(excelFile, header=2)

ctehm74n

ctehm74n4#

我对panda不太熟悉,但根据我自己的经验,类似这样的东西应该适用于标准文件I/O,我希望通用策略是可移植的:

data_file = open("filename.csv", "r")
data_file_line = ""
while not data_file_line.startswith("Measurement values:"):
    data_file_line = data_file.readline()
data_file_lines_minus_header = np.append(data_file_line, data_file.readlines())

我希望这证明对某人有帮助!

相关问题