Может ли pandas автоматически распознавать, если присутствует заголовок - PullRequest
0 голосов
/ 01 ноября 2018

начинающих панд здесь,

Я прочитал, что pandas.read_csv автоматически предполагает, что первый столбец является столбцом заголовка, и если это не так, я должен передать флаг header=None.

Теперь у меня есть код, который загружает файлы CSV, которые иногда имеют заголовки, а иногда нет ... Есть ли способ или флаг для read_csv, чтобы попытаться автоматически определить строку заголовка?

Если столбец (или несколько) имеет номера во всех строках, кроме первой, - это строка заголовка, в противном случае заголовки отсутствуют.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Хорошо, такая быстрая (и, вероятно, хрупкая) идея:

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

Что здесь происходит?

Мы читаем первые nrows (по умолчанию 20) строки файла csv. Один раз с заголовком и один раз без. Затем мы рассмотрим, какие типы данных панды присваивают каждому столбцу. Если типы данных не изменяются при игнорировании первой строки, тогда заголовок отсутствует (это, конечно, работает только в том случае, если у вас всегда есть хотя бы один столбец, где заголовок является строкой, но все остальные записи принадлежат одному другому типу данных, который не является строка, например, все плавающие).

0 голосов
/ 01 ноября 2018

Вы можете использовать

стр и содержит

df['column_name'].str.contains('text_you_are_expecting_in_header')

Это вернет True / False в зависимости от того, содержат ли записи в столбце то, что вы ищете.

После этого вы можете прочитать первую запись (для строки заголовка), и если она соответствует тексту, который вы ожидаете в заголовке, то у вас есть заголовок, иначе у вас нет заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...