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
import pandas as pd
try:
data = pd.read_csv('file.csv',encoding='ISO-8859-1')
print('csv file has header::::::')
except:
print('csv file has no header::::::')
with open(filename, "r") as f:
try:
has_headings = csv.Sniffer().has_header(f.read(1024))
except csv.Error:
# The file seems to be empty
has_headings = False
8条答案
按热度按时间ecfdbz9o1#
Python有一个内置的CSV模块可以提供帮助。
gwo2fgha2#
我会这样做:
给定一个CSV表格
csv_table
,获取最上面的(第0)行。遍历单元格并检查它们是否包含任何纯数字字符串。如果是,它就不是一个标题。在整个表达式前面用not
求反。结果:
jhdbpxl93#
对于不一定是.csv格式的文件,这非常有用:
Python中的内置函数,用于检查文本文件中的标题
应答者:https://stackoverflow.com/users/908494/abarnert
帖子链接:https://stackoverflow.com/a/15671103/7763184
camsedfj4#
只需使用try和except即可::::::::::::::::::::::
aemubtdh5#
下面是我在Pandas身上使用的一个函数,用来分析
header
应该设置为'infer'
还是None
:基于一个小样本,该函数检查有和没有标题行的数据类型的相似性。如果数据类型匹配一定百分比的列,则假定没有标题存在。我发现
0.9
的阈值对于我的用例工作得很好。该函数也相当快,因为它只读取csv文件的一个小样本。shstlldc6#
我也遇到了同样的问题,错误地返回了sniffer.has_header的has_header,甚至做了一个非常简单的检查器,在我的情况下也能正常工作
我知道它不是完美的,但它似乎是工作...为什么不它是一个简单的替换和检查,如果结果是阿尔法或没有...然后我把它放在我的def和它失败...:(然后我看到了“光”
问题不在于has_header,问题在于我的代码,因为我还想在解析实际的.csv之前检查分隔符...但是所有的嗅探都有“成本”,因为它们在csv中一次前进一行。!!!
因此,为了让has_header正常工作,你应该确保在使用它之前已经重置了所有的东西。在我的例子中,我的方法是:
r7xajy2e7#
我认为最好的检查方法是-〉简单地从文件中阅读第一行,然后匹配你的字符串,而不是任何库。
velaa5lx8#
ChrisD的答案的更新版本,为空文件提供后备:
https://docs.python.org/3/library/csv.html#csv.Sniffer.has_header