KeyError: 'метки [данные] не содержатся в оси' - PullRequest
0 голосов
/ 27 июня 2018

Я пробовал несколько разных методов, чтобы добавить строку в существующий Pandas Dataframe. Например, я попробовал решение здесь . Однако я не смог исправить проблему. Я вернулся к своему исходному коду в надежде, что кто-нибудь может помочь мне здесь.

Вот мой код:

print('XDF Created, Starting Bucket Separation...')
XDFDFdrop = pd.DataFrame.duplicated(XDFDF,subset='LastSurveyMachineID')
index_of_unique = XDFDF.drop_duplicates(subset='LastSurveyMachineID')
for index,row in zip(XDFDFdrop,XDFDF.itertuples()):
    if index:
        goodBucket.append(row)
    else:
        badBucket.append(row)
goodBucketDF = pd.DataFrame(goodBucket)
badBucketDF = pd.DataFrame(badBucket)

print('Bucket Separation Complete, EmailPrefix to F+L Test Starting...')
for emp , fname , lname , row1 in zip(goodBucketDF['EmailPrefix'] , goodBucketDF['Fname'] , goodBucketDF['Lname'] , goodBucketDF.itertuples()):
    for emp2 , row2 in zip(goodBucketDF['EmailPrefix'] , goodBucketDF.itertuples()):
        if columns != rows:
            temp = fuzz.token_sort_ratio((fname+lname),emp)
            temp2 = fuzz.token_sort_ratio((fname+lname),emp2)
            if abs(temp - temp2) < 10:
                badBucketDF.append(list(row2))
                goodBucketDF = goodBucketDF.drop(row2)
                removed = True
        rows += 1
    if removed:
        badBucketDF.append(list(row2))
        goodBucketDF = goodBucketDF.drop(row2)
        removed = False
    columns += 1

Обратите внимание: XDFDF - это относительно большой набор данных, который построен с использованием панд и был извлечен из базы данных (это не должно влиять на код, который вы видите, просто подумав, что я раскрою эту информацию).

Это моя ошибка:

Traceback (most recent call last):
  File "/Users/john/PycharmProjects/Greatness/venv/Recipes.py", line 122, in <module>
    goodBucketDF = goodBucketDF.drop([rows])
  File "/Users/john/PycharmProjects/Greatness/venv/lib/python3.6/site-packages/pandas/core/frame.py", line 3694, in drop
    errors=errors)
  File "/Users/john/PycharmProjects/Greatness/venv/lib/python3.6/site-packages/pandas/core/generic.py", line 3108, in drop
    obj = obj._drop_axis(labels, axis, level=level, errors=errors)
  File "/Users/john/PycharmProjects/Greatness/venv/lib/python3.6/site-packages/pandas/core/generic.py", line 3140, in _drop_axis
    new_axis = axis.drop(labels, errors=errors)
  File "/Users/john/PycharmProjects/Greatness/venv/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4387, in drop
    'labels %s not contained in axis' % labels[mask])
KeyError: 'labels [(15, '1397659289', 'joshi.penguin@gmail.com', 'jim', 'smith', '1994-05-04', 'joshi.penguin', 'CF032611-8A86-4688-9715-E1278E75D046')] not contained in axis'

Процесс завершен с кодом выхода 1

Хотелось бы узнать, есть ли у кого-нибудь решение этой ошибки, чтобы: я мог добавить строку из одного Dataframe, поместить ее в другой DataFrame (необязательно по порядку, и я не все равно, дублирует индекс или нет). Как только он появится в новом Dataframe, я хочу удалить его из старого.

Моя текущая проблема - удаление строки из старого Dataframe. Любая помощь будет оценена.

Если у вас есть какие-либо вопросы по коду, пожалуйста, дайте мне знать, и я отвечу, как только смогу. Спасибо за помощь.

Редактировать 1

Ниже я включил распечатку строки1. Надеюсь, это тоже поможет.

Pandas(Index=1, _1=2, entity_id='1180722688', email='assassin_penguin@live.com', Fname='jim', Lname='smith', Birthdate='1990-09-14', EmailPrefix='assassin_penguin', LastSurveyMachineID=None)

1 Ответ

0 голосов
/ 27 июня 2018

Учитывая, что XDFDF является pandas.DataFrame, разве не должны работать следующие функции?

XDFDFdrop = pd.DataFrame.duplicated(XDFDF,subset='LastSurveyMachineID')
goodBucket = XDFDF.loc[~XDFDFdrop] #the ~ negates a boolean array
badBucket = XDFDF.loc[XDFDFdrop]

Редактировать:

Обновленная ошибка произошла из-за того, что вы передали целую строку, а не индекс функции pandas.DataFrame.drop.

...