熊猫可以自动识别是否存在标题

Yos*_*ein 0 python pandas

熊猫初学者在这里,

我读到pandas.read_csv自动假定第一列是标题列,如果不是这种情况,我应该传递一个标志,header=None.

现在我有一个加载 CSV 的代码,有时有标题,有时没有……有没有办法或标志read_csv来尝试自动检测标题行?

如果一列(或几列)在除第一行之外的所有行中都有数字 - 那么它是标题行,否则没有标题。

kur*_*pan 5

好的,这么快(而且可能很脆弱)的想法:

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
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?

我们读取 csv 文件的前 nrows(默认 20)行。一次有标题,一次没有。然后我们看看pandas 分配给每一列的数据类型。如果在忽略第一行时数据类型没有改变,那么就没有标题(当然,只有当您始终至少有一列标题是字符串,但所有其他条目都不是其他数据类型时才有效)一个字符串,例如所有浮点数)。

  • 我喜欢你的解决方案,会尝试一下!(我认为你应该首先声明 `df = pd.DataFrame...` 然后继续,但没关系,我明白这个想法) (2认同)