Панды не вызывают исключения при чтении искаженных данных - PullRequest
0 голосов
/ 31 октября 2018

Следующее искажено (5 столбцов, но 6 значений), но панды не выдают исключение.

timestamp,col1,col2,col3,col4
1540998000,XY,40000764,G1-FDD:0,13.90,13.90
1540998000,XY,40000764,C1-FDD:0,-102.80,-102.80
1540998000,XY,40000764,C1-FDD:1,-102.80,-102.80

Вот как панды читают это.

>>> import pandas
>>> pandas.read_csv("some_20181031-150205.csv")
           timestamp  col1     col2           col3       col4
1540998000     XY  40000764  G1-FDD:0         13.9       13.9
1540998000     XY  40000764  C1-FDD:0       -102.8     -102.8
1540998000     XY  40000764  C1-FDD:1       -102.8     -102.8

Почему не возникает исключение?

Значения первого столбца являются фактическими и не были изменены.

Спасибо, Anoop

1 Ответ

0 голосов
/ 31 октября 2018

Панды предполагает индекс

Это по замыслу. Первый «столбец» обрабатывается как index и поэтому не нуждается в названии. Чтобы понять это, вы должны оценить, что каждый фрейм данных должен иметь индекс, независимо от того, указан он явно или нет. Например, обратите внимание на значения 0, 1, 2 по левому краю:

import pandas as pd, numpy as np

df = pd.DataFrame(np.random.random((3, 5)))

print(df)

          0         1         2         3         4
0  0.244763  0.994879  0.085906  0.330168  0.269433
1  0.849739  0.631897  0.372024  0.413401  0.866026
2  0.183609  0.316389  0.213718  0.707552  0.033736

Доступ к индексу

Вы можете напрямую получить доступ к индексу, который в данном случае является pd.RangeIndex:

print(df.index)
RangeIndex(start=0, stop=3, step=1)

print(df.index.values)
array([0, 1, 2], dtype=int64)

Явный тест

Вы можете явно проверить, совпадают ли метки ваших столбцов с вашими данными:

def check_csv(file_in):
    col_count = pd.read_csv(x, nrows=0, header=None).shape[1]                 # 5
    data_count = pd.read_csv(x, skiprows=[0], nrows=0, header=None).shape[1]  # 6
    return col_count == data_count

assert check_csv('file.csv'), 'Dataframe is malformed, check column labels versus data!'

Оператор assert будет вызывать AssertionError, когда ваш CSV-файл искажен.

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