熊猫初学者在这里,
我读到pandas.read_csv自动假定第一列是标题列,如果不是这种情况,我应该传递一个标志,header=None.
现在我有一个加载 CSV 的代码,有时有标题,有时没有……有没有办法或标志read_csv来尝试自动检测标题行?
如果一列(或几列)在除第一行之外的所有行中都有数字 - 那么它是标题行,否则没有标题。
好的,这么快(而且可能很脆弱)的想法:
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 分配给每一列的数据类型。如果在忽略第一行时数据类型没有改变,那么就没有标题(当然,只有当您始终至少有一列标题是字符串,但所有其他条目都不是其他数据类型时才有效)一个字符串,例如所有浮点数)。
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |