解析 CSV 标头

Posted

技术标签:

【中文标题】解析 CSV 标头【英文标题】:Parsing CSV headers 【发布时间】:2019-10-08 03:01:43 【问题描述】:

我的要求是在n 行数之后读取多个包含我感兴趣的数据的 CSV 文件。这个数字n 不是恒定的,因为它随不同的 CSV 而变化(因此,我不能使用 skiprows)。

CSV的格式如下:

 Test: Rate1, "2" , units
 specimen: Rectangular, "3", units

Time, Estimate, Load
(s) , (units) , (N)
"1","2","4"
"5","8","12"

另一个 CSV 可能是:

 Test: Rate1, "2" , units
 specimen: Rectangular, "3" , units
 value_based : Sample7, "9" , product
 Test_condition: controlled, "0" , test


Time, Estimate, Load
(s) , (units) , (N)
"12","6","8"
"18","3","2"

但是,我感兴趣的唯一列名是:[TimeEstimateLoad]。

我想做以下事情:

    导出数据并指定标头为TimeEstimateLoad

    跳过第一行值((s) , (units), (N)),因为我想将它们与标题连接起来并将它们重命名为 Time(s) , Estimate(units), Load(N)

这是我尝试过的:

with open(file,"r+",newline="") as csvFile:
    dictReader = csv.DictReader(csvFile)
    for row in dictReader:
        print(row["Time"], row["Load"], row["Extension"])
df = pd.read_csv(file,usecols=["Time","Load","Extension"])
print(df["Time"].head(3))

请建议我需要如何继续使用我的预期标题获取数据。提前致谢。

【问题讨论】:

你看过这个***.com/questions/36503074/… 谢谢@D_Serg。这通过效用函数解决了我的部分问题。我只是想知道我想要的是否可以通过,可能是,另一种方式来实现。 【参考方案1】:

我不认为 Pandas 本身能够确定正确的起始行,但可以通过对文件进行一点准备来确定正确的行。例如:

import pandas as pd
import csv

filename = 'test.csv'
header_row = ["Time", "Estimate", "Load"]

with open(filename, newline='') as f_csv:
    for row_number, row in enumerate(csv.reader(f_csv), start=-1):
        if row == header_row:
            break

df = pd.read_csv(filename, skiprows=row_number, names=header_row)
print(df)

给予:

   Time  Estimate  Load
0     1         2     4
1     5         8    12

【讨论】:

谢谢。巧合的是,我在发布问题后想到了这种方法,实施它并解决了我的问题。这是正确的方法。

以上是关于解析 CSV 标头的主要内容,如果未能解决你的问题,请参考以下文章

用pandas编写单个CSV标头

使用 R 解析出 Surveymonkey csv 文件

CSVHelper 使用每个文件上的多个映射解析多个 CSV

BigQuery - Apache Avro 库无法解析标头并出现以下错误:数据文件无效。魔法不匹配

在 clickhouse 中加载数据时跳过 csv 标头

如何使用opencsv读取没有标头的csv文件?