如何使用Python检查CSV是否有头文件?

2024-09-14 11:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV文件,我想检查第一行中是否只有字符串(即标题)。我尽量避免使用任何附加功能,如pandas等。我想我会使用if语句,如if row[0]是字符串打印这是CSV,但我真的不知道怎么做:-有什么建议吗?


Tags: 文件csv字符串功能标题pandasif语句
3条回答

我会这样做:

is_header = not any(cell.isdigit() for cell in csv_table[0])

给定CSV表csv_table,获取顶部(第零行)。遍历单元格并检查它们是否包含纯数字字符串。如果是的话,那不是头条。在整个表达式前面用not否定它。

结果:

In [1]: not any(cell.isdigit() for cell in ['2','1'])
Out[1]: False

In [2]: not any(cell.isdigit() for cell in ['2','gravy'])
Out[2]: False

In [3]: not any(cell.isdigit() for cell in ['gravy','gravy'])
Out[3]: True

Python有一个内置的CSV module可以提供帮助。E、 g

import csv
with open('example.csv', 'rb') as csvfile:
    sniffer = csv.Sniffer()
    has_header = sniffer.has_header(csvfile.read(2048))
    csvfile.seek(0)
    # ...

下面是一个我与pandas一起使用的函数,用于分析header是否应设置为'infer'None

def identify_header(path, n=5, th=0.9):
    df1 = pd.read_csv(path, header='infer', nrows=n)
    df2 = pd.read_csv(path, header=None, nrows=n)
    sim = (df1.dtypes.values == df2.dtypes.values).mean()
    return 'infer' if sim < th else None

基于一个小样本,该函数检查带有或不带有标题行的数据类型的相似性。如果数据类型与某个百分比的列匹配,则假定不存在头。我发现0.9的阈值对于我的用例很有用。这个函数也相当快,因为它只读取csv文件的一个小样本。

相关问题 更多 >