Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2017 14:58:33

jon34
Зарегистрирован: 2016-02-14
Сообщения: 47
Репутация: +  0  -
Профиль   Отправить e-mail  

Pandas теряются значения столбца

Уже всю голову сломал, помогите пожалуйста. В столбец __Счет попадает почему-то 1 значение, а должно 2. Не могу понять в чем причина.
P.S в counter 2 значения хранятся, а при записи в объект data почему-то теряется 1 из них.

 import pandas as pd
 
from collections import OrderedDict
from decimal import Decimal
 
compare_columns = ['Счет дебет', 'Счет получателя']
 
data = pd.read_excel('files/translations-408-2.xlsx', sheetname=0)
data = data[data.duplicated(compare_columns, keep=False)].copy(deep=True)
 
counter = OrderedDict()
sum_i, col_unique_i = [
    i for i, col in enumerate(data.keys()) if col in ('Счет получателя', 'Сумма')
]
for i in data.values:
    num_card, sum_ = i[col_unique_i], i[sum_i]
    counter[num_card] = counter.get(num_card, [0, 0])
    counter[num_card][0] += 1
    counter[num_card][1] += Decimal(sum_)
 
data['__Счет'] = pd.Series([i for i in counter.keys()])
data['__Кол-во дубликатов'] = pd.Series([i[0] for i in counter.values()])
data['__Сумма'] = pd.Series([i[1] for i in counter.values()])
 
print(data)

Прикреплённый файлы:
attachment translations-408-2.xlsx (45,6 KБ)

Офлайн

#2 Май 26, 2017 08:48:10

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Pandas теряются значения столбца

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

 data = data[data.duplicated(compare_columns, keep=False)]
data = pd.DataFrame(data.values.copy(), columns=data.columns.copy())

Офлайн

#3 Май 26, 2017 09:38:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Pandas теряются значения столбца

alex925
но решить такую-же проблему удалось решить так

 sum_i, col_unique_i = [
    i for i, col in enumerate(data.keys()) if col in ('Счет получателя', 'Сумма')
]

автор смело распаковывает список в две переменные. У меня возникает вопрос, нужны ли все сложности и непонятности этого алгоритма, если заранее известно, что всех данных у нас будет всего два числа? Почему-то мне кажется (хотя я могу и ошибаться), что автор алгоритма предполагал другое поведение распаковки списка. Вообще с этим списком все выглядит как-то бредовенько, по крайней мере определять номер столбца по его названию лично мне кажется не лучшей идеей.

 for i in data.values:
values - это метод, где скобки?



Офлайн

#4 Май 26, 2017 09:53:44

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Pandas теряются значения столбца

FishHook
values - это метод, где скобки?
data это pandas.DataFrame, там values это атрибут, а не метод.

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

Ну, а вообще разговор то не об этом на самом деле.

Отредактировано alex925 (Май 26, 2017 09:54:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version