Найти - Пользователи
Полная версия: Pandas теряются значения столбца
Начало » Python для новичков » Pandas теряются значения столбца
1
jon34
Уже всю голову сломал, помогите пожалуйста. В столбец __Счет попадает почему-то 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)
alex925
Не знаю точные причины такого поведения, но решить такую-же проблему удалось решить так
 data = data[data.duplicated(compare_columns, keep=False)]
data = pd.DataFrame(data.values.copy(), columns=data.columns.copy())
FishHook
alex925
но решить такую-же проблему удалось решить так

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

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

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

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

Ну, а вообще разговор то не об этом на самом деле.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB