好吧,那么快速(而且可能很脆弱)的想法。
import pandas as pd
df = pd.DataFrame(columns=["ints_only", "strings_only"],
data=[[1,"a"], [3,"b"]])
df.to_csv("header.csv")
df.to_csv("noheader.csv", header=None)
def has_header(file, nrows=20):
df = pd.read_csv(file, header=None, nrows=nrows)
df_header = pd.read_csv(file, nrows=nrows)
return tuple(df.dtypes) != tuple(df_header.dtypes)
has_header("header.csv") # gives True
has_header("noheader.csv") # gives False
这里发生了什么?
我们读取csv文件的前nrows(默认为20)行。一次是带标题的,一次是不带标题的。然后我们看看pandas给每一列分配了什么数据类型。如果数据类型在忽略第一行时没有变化,那么就没有页眉(当然,这只适用于至少有一列的页眉是字符串,但所有其他条目都是另一种非字符串的数据类型,例如所有的浮点数)。