Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811

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

25.02.2020, 23:00. Показов 2032. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2020, 23:00
Ответы с готовыми решениями:

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

Преобразование типов
Помогите пожалуйста решить задачку. 1) Напишите программу, которая будет принимать числа от пользователя и суммировать их, пока он не...

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

18
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
25.02.2020, 23:06
Преобразовать в запросе к БД
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
25.02.2020, 23:38  [ТС]
Я так и подумал, в запросе написал : 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
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
26.02.2020, 06:14
А тип данных перепроверили?
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
26.02.2020, 07:05
Похоже что у вас в данных или в ОСП или в Площадка A где-то пробел лишний...
Если данные вводились вручшую, то может еще быть русское Р вместо латиницы P...
Сравните, например, хэши от этих строк..
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
26.02.2020, 08:47  [ТС]
Да тип данных поменялся.
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
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
26.02.2020, 09:00
Вот в этом ошибка

Python
1
              (~df2['Сумма за месяц в рублях'].isin(df1['PRICE_DDA'])
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
26.02.2020, 09:09  [ТС]
сделал проверку:
Python
1
pl_ = df2[df2['Площадка А'].isin(df1['Площадка А'])]
строчка с
112026PL_77_56782099-12-313400.0
появилась, значит все таки суммы не может сравнить, но почему то не по всем строчкам а именно по этой....
ППЦ голова сейчас взорвется
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
26.02.2020, 09:18
Python
1
isin(df1['PRICE_DDA']
удаляет все вхождения из
Python
1
df2['Сумма за месяц в рублях']
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
26.02.2020, 10:08  [ТС]
как тогда правильно сравнить суммы? != не работает.
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
26.02.2020, 10:25
Ну, тут надо знать точно все условия задачи
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
26.02.2020, 10:36  [ТС]
ОСП это колонка с номерами договоров, в одном ОСП может быть несколько Площадок.
На одной Площадке может быть несколько ОСП (договоров аренды)
Надо найти под одним номером ОСП, например 112026 все площадки, в данном случае их около 70 шт. Пара ОСП и Площадка уникальна, т.е. одному номеру ОСП будет соответствовать один номер Площадки. и тоже самое надо найти в другой базе и сравнить у них цены.
Например есть: df1
ОСП Площадка
112026 PL_77_5678
112026 PL_77_5679
112027 PL_77_5678
и тоже в df2 но столбец с ценой может различаться.
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
26.02.2020, 10:41
Перед тем как сравнить цены, надо объединить 2 таблицы в одну, тогда можно будет сравнить одну колонку с ценами с другой колонкой
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
26.02.2020, 11:29  [ТС]
Объединил:
Python
1
2
df3 = pd.merge(df1, df2, on=['Площадка А', 'ОСП'])
summa = df3[df3['Сумма за месяц в рублях'] != df3['PRICE_DDA']]
Это касается только сумм? или вообще и других значений?
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
26.02.2020, 12:38
Все зависит от условий
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
26.02.2020, 13:04  [ТС]
А вот ещё задача на сравнение, надо найти отсутствие записи в df1 сравнив 2 колонки, "арендатор", и "Площадка". Пробовал isin, но выдает почему то лишние строчки.
0
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 12
21.03.2020, 09:14
Добрый день, есть вопрос, надеюсь по теме. Имеется df1 со следующими данными:
Code
1
2
3
4
5
6
7
8
9
10
11
12
        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
проверяю типы столбцов, получаю:
Code
1
2
3
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, если я правильно понимаю. Пробую так:
Code
1
df1.nm_id.astype('int64')
Все равно получается:
Code
1
2
3
nm_id       object
turnover    object
dtype: object
Я уж подумал, может что-то не так с данными в колонке nm_id, от безысходности записал df1 в csv, затем прочел его, проверил типы и вуаля:
Code
1
2
3
4
Unnamed: 0     int64
nm_id          int64
turnover      object
dtype: object
Подскажите в чем может быть проблема, почему колонка df1 не приводится к типу int64 по-нормальному?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.03.2020, 10:23
copy: bool = True
astype по умолчанию возвращает копию данных.
1
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 12
21.03.2020, 14:31
Спасибо за наводку про возврат копии
попробовал сначала:
Python
1
df1 = df1.nm_id.astype('int64')
тип нужной колонки изменился, но во фрейме осталась только одна эта колонка. Погуглил документацию astype сделал так:
Python
1
df1 = df1.astype({"nm_id":'int64', "turnover":object})
теперь результата достиг, сомневаюсь только в "элегантности" решения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2020, 14:31
Помогаю со студенческими работами здесь

Новый Dataframe с информацией из старого Dataframe
У меня есть такой Dataframe. Мне нужно посчитать количество каждого значения из столбца Message для каждого номера из...

AST объект, преобразование типов
Имеется AST объект, представленный в виде строки: x = "<ast.Module object at 0x7fd166857380>". Проблема заключается в том, что мне нужно...

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

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

Не могу вызвать неявное преобразование типов в Main для проверки "Перегрузки операторов преобразования типов"
Добрый день, Написал явное преобразования типов из дроби в тип double (явное потому что если делаю неявным то оно конфликтует с...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru