Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
1

Преобразование типов в Dataframe

25.02.2020, 23:00. Просмотров 480. Ответов 18
Метки нет (Все метки)

Добрый день!
При запросе к БД получаю Dataframe df1 c с типами:
Python
1
2
3
4
5
6
Площадка А                    object
TYPE_RAZM_DDA                 object
DDA_NAME                      object
ОСП                           object
PRICE_DDA                     object
DATE_DEMONTAZHA_KA    datetime64[ns]
Но столбец PRICE_DDA должен быть 'float'. из за этого при сравнении с другим df происходит ошибка, не сравниваются суммы. т.е. сравниваются но не все. тип данных во втором df2
Python
1
2
3
4
5
6
ОСП                                object
Заказчик                           object
Статус договора в JDE              object
Площадка А                         object
Окончание аренды           datetime64[ns]
Сумма за месяц в рублях           float64
из за этого не корректно работает:
Python
1
2
3
DDA_summa = df2[(df2['ОСП'].isin(df1['ОСП'])) & 
              (df2['Площадка А'].isin(df1['Площадка А'])) &
              (~df2['Сумма за месяц в рублях'].isin(df1['PRICE_DDA']))]
Нужно по 2-м условиям найти те строчки где суммы не совпадают.
Как можно преобразовать типы для дальнейшего сравнения?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2020, 23:00
Ответы с готовыми решениями:

Преобразование dictionary в pd.DataFrame
Добрый день. Написал парсер, который сохраняет данные в словарь. Сейчас хочу доработать код и...

Преобразование типов данных
Если в консоли напишу x=int(5) то как вывести x с этим значением, чтобы оно стало уже float или...

Python неявное преобразование типов данных
Добрый вечер программисты! Проблема такая, ругается на неявное преобразование типов, я пробовал по...

SIP: а как происходит преобразование типов данных между C++ и Python?
Есть у меня C++ный класс. Хочу я сделать для него SIP-обёртку, чтобы дёргать его методы из...

18
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
25.02.2020, 23:06 2
Преобразовать в запросе к БД
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
25.02.2020, 23:38  [ТС] 3
Я так и подумал, в запросе написал : CAST(PRICE_DDA AS FLOAT)
но все равно он не нашел разницу между: df2
'ОСП' - 112026
'Площадка А' - PL_77_5678
'Сумма за месяц в рублях' - 3400.0
и df1
'Площадка А' - PL_77_5678
'ОСП' - 112026
'PRICE_DDA' - 6800.0
в "DDA_summa" этой строчки нет, хотя цифры разные.

Вот вывод ОСП отсортирован:
107902PL_39_10052099-12-316412.5 5771.25
113219PL_77_14032099-12-314166.66 4166.67
строчки с ОСП 112026 нет

Добавлено через 7 минут
А должно быть
107902PL_39_10052099-12-316412.5 5771.25
112026PL_77_56782099-12-313400.0 6800.0
113219PL_77_14032099-12-314166.66 4166.67
Хотя как видно в остальных суммах разницу нашел даже на одку копейку. 4166.66 и 4166.67.
0
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
26.02.2020, 06:14 4
А тип данных перепроверили?
0
482 / 279 / 95
Регистрация: 07.11.2019
Сообщений: 768
26.02.2020, 07:05 5
Похоже что у вас в данных или в ОСП или в Площадка A где-то пробел лишний...
Если данные вводились вручшую, то может еще быть русское Р вместо латиницы P...
Сравните, например, хэши от этих строк..
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
26.02.2020, 08:47  [ТС] 6
Да тип данных поменялся.
Python
1
2
3
4
5
6
Площадка А                    object
TYPE_RAZM_DDA                 object
DDA_NAME                      object
ОСП                           object
PRICE_DDA                    float64
DATE_DEMONTAZHA_KA    datetime64[ns]
такое ощущение, что не срабатывает фильтр
Python
1
2
DDA_summa = df2[(df2['ОСП'].isin(df1['ОСП'])) & 
              (df2['Площадка А'].isin(df1['Площадка А'])) &
номер PL не может быть русскими буквами, если только при считывании файла питон не посчитал это русской буквой. а как это можно проверить?
0
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
26.02.2020, 09:00 7
Вот в этом ошибка

Python
1
              (~df2['Сумма за месяц в рублях'].isin(df1['PRICE_DDA'])
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
26.02.2020, 09:09  [ТС] 8
сделал проверку:
Python
1
pl_ = df2[df2['Площадка А'].isin(df1['Площадка А'])]
строчка с
112026PL_77_56782099-12-313400.0
появилась, значит все таки суммы не может сравнить, но почему то не по всем строчкам а именно по этой....
ППЦ голова сейчас взорвется
0
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
26.02.2020, 09:18 9
Python
1
isin(df1['PRICE_DDA']
удаляет все вхождения из
Python
1
df2['Сумма за месяц в рублях']
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
26.02.2020, 10:08  [ТС] 10
как тогда правильно сравнить суммы? != не работает.
0
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
26.02.2020, 10:25 11
Ну, тут надо знать точно все условия задачи
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
26.02.2020, 10:36  [ТС] 12
ОСП это колонка с номерами договоров, в одном ОСП может быть несколько Площадок.
На одной Площадке может быть несколько ОСП (договоров аренды)
Надо найти под одним номером ОСП, например 112026 все площадки, в данном случае их около 70 шт. Пара ОСП и Площадка уникальна, т.е. одному номеру ОСП будет соответствовать один номер Площадки. и тоже самое надо найти в другой базе и сравнить у них цены.
Например есть: df1
ОСП Площадка
112026 PL_77_5678
112026 PL_77_5679
112027 PL_77_5678
и тоже в df2 но столбец с ценой может различаться.
0
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
26.02.2020, 10:41 13
Перед тем как сравнить цены, надо объединить 2 таблицы в одну, тогда можно будет сравнить одну колонку с ценами с другой колонкой
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
26.02.2020, 11:29  [ТС] 14
Объединил:
Python
1
2
df3 = pd.merge(df1, df2, on=['Площадка А', 'ОСП'])
summa = df3[df3['Сумма за месяц в рублях'] != df3['PRICE_DDA']]
Это касается только сумм? или вообще и других значений?
0
58 / 54 / 21
Регистрация: 01.11.2019
Сообщений: 246
26.02.2020, 12:38 15
Все зависит от условий
0
8 / 13 / 7
Регистрация: 12.10.2011
Сообщений: 629
26.02.2020, 13:04  [ТС] 16
А вот ещё задача на сравнение, надо найти отсутствие записи в df1 сравнив 2 колонки, "арендатор", и "Площадка". Пробовал isin, но выдает почему то лишние строчки.
0
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 11
21.03.2020, 09:14 17
Добрый день, есть вопрос, надеюсь по теме. Имеется df1 со следующими данными:
Код
        nm_id turnover
0     1076687        0
1     1076688        0
2     1076689        0
3     1076690   313,00
4     1076691        0
...       ...      ...
1889  8922416        0
1890  8922417        0
1891  9550477        0
1892  9550481   135,00
1893  9550482        0
проверяю типы столбцов, получаю:
Код
nm_id       object
turnover    object
dtype: object
Для того чтобы мне сделать merge с df2 по столбцу nm_id и не получать ошибку: You are trying to merge on int64 and object columns, мне нужно в df1 привести колонку nm_id к int64, если я правильно понимаю. Пробую так:
Код
df1.nm_id.astype('int64')
Все равно получается:
Код
nm_id       object
turnover    object
dtype: object
Я уж подумал, может что-то не так с данными в колонке nm_id, от безысходности записал df1 в csv, затем прочел его, проверил типы и вуаля:
Код
Unnamed: 0     int64
nm_id          int64
turnover      object
dtype: object
Подскажите в чем может быть проблема, почему колонка df1 не приводится к типу int64 по-нормальному?
0
3278 / 2506 / 877
Регистрация: 28.10.2013
Сообщений: 6,589
21.03.2020, 10:23 18
copy: bool = True
astype по умолчанию возвращает копию данных.
1
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 11
21.03.2020, 14:31 19
Спасибо за наводку про возврат копии
попробовал сначала:
Python
1
df1 = df1.nm_id.astype('int64')
тип нужной колонки изменился, но во фрейме осталась только одна эта колонка. Погуглил документацию astype сделал так:
Python
1
df1 = df1.astype({"nm_id":'int64', "turnover":object})
теперь результата достиг, сомневаюсь только в "элегантности" решения
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2020, 14:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Преобразование типов
Ребят, помогите, пожалуйста. Добавлено через 3 часа 32 минуты Совсем всё грустно :(

Преобразование типов
public void dobovitSotr(JButton djbavSotr,SotrudnikiTable d,Connectiondb con,Frame1 f){ ...

Преобразование типов
Подскажите, пожалуйста! Я не сильна в C#. Я ввожу в textBox любое отрицательное число....

Преобразование типов
Цель копировать из одного объекта в другой инофрмацию, типы разные, поэтому приходится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.