我有这个csv,它包含:
"""START
ABC
XYZ
START OF DATA
"COL1","COL2","COL3"
"1","2","3"
END OF DATA
LMN
NUMBER-OF-RECORDS=1
OPQ"""
我想要的数据帧看起来像:
COL1 COL2 COL3
1 2 3
基本上是包含在START OF DATA和END OF DATA之间的任何内容。
我试着做:df = pd.read_csv(file_name,header=4,skipfooter=4)
这是可行的,但我不喜欢在页眉或页脚可能更改时对值进行编码的想法。我认为最好的方法是获取这两个关键字之间的数据,并将其放入数据帧中。我该怎么做?
如果事先不知道页眉和页脚的长度,则必须手动解析文件并找到包含关键字的行号。
这里有一种方法,从https://stackoverflow.com/a/3961374/9357244:
import pandas as pd
filename = 'csv_w_hdr_ftr.csv'
with open(filename) as myFile:
for num, line in enumerate(myFile, 1):
if 'START OF DATA' in line:
start_line = num
elif 'END OF DATA' in line:
end_line = num
footer_len = num - end_line + 1
df = pd.read_csv(filename,header=start_line,skipfooter=footer_len)
请注意,如果您可以控制csv文件的编写方式,如果在页眉/页脚行的开头添加注释字符,则可以使用read_csv
中的comment
参数跳过这些行(请参阅read_csv文档(。