Использование lo c на объединенном фрейме данных - PullRequest
0 голосов
/ 04 мая 2020

Добрый день. Я пытаюсь сделать относительно простую вещь, но не могу понять, что не так. У меня есть два фрейма данных: df и df2. Каждый фрейм данных имеет столбец «Аккаунт», содержащий 5-значный код для клиента и «Имя клиента» с его полным именем. Я хочу l oop через уникальные значения «Account» и получить соответствующее значение «Client Name». Код ниже работал отлично:

for x in df['Account'].unique():

    worksheet.write(row, 4, df.loc[df[df['Account'] == x].index[0], 'Client Name'])

Однако позже мне пришлось объединить 2 кадра данных, поэтому я использовал concat

modified_df = pd.concat([pd.concat([df['Account'], df2['Account']]),
                 pd.concat([df['Client Name'], df2['Client Name']])], axis=1)

И, что удивительно, когда я заменил df на modify_df, он перестал работать. Pycharm выделяет 'lo c' с советом: 'Неразрешенная ссылка на атрибут' loc 'для класса' type '

И когда я запускаю код, возникает следующая ошибка:' TypeError: невозможно преобразовать серию в класс 'float ''

Я проверил, что df и updated_df являются pandas классом данных

Ниже приведены примеры данных

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([['A', 'Company A'], ['B', 'Company B'], ['A', 'Company A']]),columns=['Account', 'Client Name'])
df2 = pd.DataFrame(np.array([['C', 'Company C'], ['B', 'Company B'], ['A', 'Company A']]),columns=['Account', 'Client Name'])
modified_df = pd.concat([pd.concat([df['Account'], df2['Account']]),
                     pd.concat([df['Client Name'], df2['Client Name']])], axis=1)

То, что я ожидаю получить, это список "Компания A, Компания B, Компания C "

Обновление Играя с приведенными выше примерами данных, я заметил, что конкрированные указания df несколько не уникальны. У меня есть два набора (0, 1, 2) индикаторов ... Предположение, что это root моей проблемы.

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Обнаружил, что причина была в дублировании индикаторов, поэтому я просто сбросил их и все заработало

modified_df = pd.concat([pd.concat([df['Client Name'], df2['Client Name']]),
                     pd.concat([df['Account'], df2['Account']])], axis=1)
modified_df = pd.concat([modified_df], ignore_index=True)
0 голосов
/ 04 мая 2020

Если проблема заключается в дублировании индекса, почему бы вам не получить первую строку, где Account == x:

for x in df['Account'].unique():
    worksheet.write(row, 4, df.loc[df.Account == x, 'Client Name'].iloc[0])
0 голосов
/ 04 мая 2020

Возможно, в вашей df2 [учетной записи] может быть значение, которое нельзя конвертировать в float.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...