2024-09-14 11:23:42 发布
网友
我有一个CSV文件,我想检查第一行中是否只有字符串(即标题)。我尽量避免使用任何附加功能,如pandas等。我想我会使用if语句,如if row[0]是字符串打印这是CSV,但我真的不知道怎么做:-有什么建议吗?
我会这样做:
is_header = not any(cell.isdigit() for cell in csv_table[0])
给定CSV表csv_table,获取顶部(第零行)。遍历单元格并检查它们是否包含纯数字字符串。如果是的话,那不是头条。在整个表达式前面用not否定它。
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:
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文件的一个小样本。
0.9
我会这样做:
给定CSV表
csv_table
,获取顶部(第零行)。遍历单元格并检查它们是否包含纯数字字符串。如果是的话,那不是头条。在整个表达式前面用not
否定它。结果:
Python有一个内置的CSV module可以提供帮助。E、 g
下面是一个我与pandas一起使用的函数,用于分析
header
是否应设置为'infer'
或None
:基于一个小样本,该函数检查带有或不带有标题行的数据类型的相似性。如果数据类型与某个百分比的列匹配,则假定不存在头。我发现
0.9
的阈值对于我的用例很有用。这个函数也相当快,因为它只读取csv文件的一个小样本。相关问题 更多 >
编程相关推荐