Как убедиться, что столбец в кадре данных, загруженный из файла CSV, отформатирован как целое число (без десятичных символов) - PullRequest
0 голосов
/ 09 июля 2019

Я использую Python 3.7

Мне нужно загрузить данные из двух разных источников (оба csv) и определить, какие строки из одного источника отсутствуют во втором источнике.

Я использовал фреймы данных pandas для загрузки данных и сравнения двух источников данных.

Я загрузил данные из файла csv, и значение, например 2010392, в столбце фрейма данных превратилось в 2010392.0.

Я прочитал довольно много статей о форматировании столбцов фрейма данных; к сожалению, большинство из них касается преобразования даты и времени.

Я наткнулся на статью «Форматировать целочисленный столбец Data-frame в Python-пандах» в http://www.datasciencemadesimple.com/format-integer-column-of-dataframe-in-python-pandas/, которая не решает мою проблему

На основании вышеупомянутой статьи я попробовал следующее:

pd.to_numeric(data02['IDDLECT'], downcast='integer')

Out[63]: 
0         2010392.0

1       111777967.0

2         2010392.0

3         2012554.0

4         2010392.0

5         2010392.0

6         2010392.0

7         1170126.0

и, как вы можете видеть, значения столбцов по-прежнему имеют десятичную точку с нулем.

Я ожидаю, что загрузка фрейма данных из файла csv сохранит формат числа, например 2010392, равным 2010392, а не 2010392.0

Вот код, который я пробовал:

import pandas as pd

data = pd.read_csv("timetable_all_2019-2_groups.csv") 
data02 = data.drop_duplicates()

print(f'Len data {len(data)}')
print(data.head(20))

print(f'Len data02 {len(data02)}')
print(data02.head(20))

pd.to_numeric(data02['IDDLECT'], downcast='integer')

Вот несколько строк содержимого файла csv: Данные в одном источнике выглядят так:

IDDCYR,IDDSUBJ,IDDOT,IDDGRPTYP,IDDCLASSGROUP,IDDLECT,IDDPRIMARY

019,AAACA1B,VF,C,A1,2010392,Y

2019,AAACA1B,VF,C,A1,111777967,N

2019,AAACA3B,VF,C,A1,2010392,Y

2019,AAACA3B,VF,C,A1,2012554,N

2019,AAACB2A,VF,C,B1,2010392,Y

2019,AAACB2A,VF,P,B2,2010392,Y

2019,AAACB2A,VF,C,B1,2010392,N

2019,AAACB2A,VF,P,B2,1170126,N

2019,AAACH1A,VF,C,A1,2010392,Y

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Похоже, у вас есть данные не целочисленного типа.После загрузки вы должны что-то сделать с этими данными, а затем преобразовать столбец в int.

Из вашего описания ошибки у вас есть значения nans и / или inf.Вы можете приписать отсутствующие значения моде, среднему значению, медиане или постоянному значению.Вы можете достичь этого либо с помощью панд, либо с помощью sklearn imputer , который предназначен для вменения пропущенных значений.

Обратите внимание, что если вы используете среднее значение, вы можете получить число с плавающей запятой, поэтому убедитесь, что среднее значение получено в виде целого числа.

Выбранный вами метод вменения действительно зависит от того, что выЯ буду использовать эти данные позже.Если вы хотите понять данные, заполнение nans 0 может позже разрушить функции агрегирования (например, если вы хотите узнать, что означает среднее значение, оно не будет точным).

При этом явижу, вы имеете дело с категориальными данными.Одним из вариантов здесь является использование dtype='category'.Если позднее вы захотите подогнать модель под это и оставите идентификаторы в виде чисел, модель может заключить странные вещи, которые не верны (например, сумма двух идентификаторов равна некоторому третьему идентификатору или что более высокие идентификаторы важнее, чемнизшие ... вещи, которые априори не имеют смысла и не должны игнорироваться и оставляться на волю случая.)

Надеюсь, это поможет!

0 голосов
/ 09 июля 2019
data02['IDDLECT'] = data02['IDDLECT']fillna(0).astype('int')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...