Форум сайта python.su
Уже всю голову сломал, помогите пожалуйста. В столбец __Счет попадает почему-то 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)
Прикреплённый файлы:
translations-408-2.xlsx (45,6 KБ)
Офлайн
Не знаю точные причины такого поведения, но решить такую-же проблему удалось решить так
data = data[data.duplicated(compare_columns, keep=False)] data = pd.DataFrame(data.values.copy(), columns=data.columns.copy())
Офлайн
alex925
но решить такую-же проблему удалось решить так
sum_i, col_unique_i = [ i for i, col in enumerate(data.keys()) if col in ('Счет получателя', 'Сумма') ]
for i in data.values:
Офлайн
FishHookdata это pandas.DataFrame, там values это атрибут, а не метод.
values - это метод, где скобки?
FishHookОставим это на совести автора кода + я уверен, что этот код скорее всего сильно упрощался, для того, чтобы выложить его сюда и в изначальной версии кода думаю предусматривается работа с переменным количеством столбцов.
Вообще с этим списком все выглядит как-то бредовенько, по крайней мере определять номер столбца по его названию лично мне кажется не лучшей идеей.
Отредактировано alex925 (Май 26, 2017 09:54:34)
Офлайн