2016-12-13 1 views
0

Я использую следующий код:Панды ошибка порядка при сортировке dataframe и удаление дубликатов

UsersFullUnique = UsersFullLoc 
UsersFullUnique.Placetype = UsersFullUnique.Placetype.astype('category', 
            categories=['Continent', 'Country', 'State', 'County','Town','POI', 'Suburb', 'LocalAdmin', 'Island', 'Estate', 'Colloquial', 'HistoricalTown', 'HistoricalCounty', 'LandFeature', 'Supername'], 
            ordered=True) 

UsersFullUnique = UsersFullUnique.sort_values('Placetype').groupby('ID', as_index=False).first() 
UsersFullUnique.head(8) 

Чтобы отсортировать следующую dataframe:

ID   Unnamed: 0 WOE_ID Locationname_x Name_Type Language_x Username Friends Followers Status_count Favorites Account_age      ISO Locationname Language Placetype Parent_ID 
100000045 3363940  2459115 New York City V   ENG   UsersDude 35.0 10.0   0.0    0   Mon Dec 18 11:19:42 CST 2009 US New York   ENG  Town  2347591 

Который дает мне ошибку

TypeError: _astype() got an unexpected keyword argument 'ordered' 

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

Unnamed: 0 WOE_ID Locationname_x Name_Type Language_x ID Username Friends Followers Status_count Favorites Account_age ISO Locationname_y Language_y Placetype Parent_ID 

и

WOE_ID ISO Locationname Language Placetype Parent_ID ID Username Friends Followers Status_count Favorites Account_age 

который содержал почти один и тот же тип информации, и это не дало никаких ошибок.

Кто-нибудь знает о возможном решении?

+0

Вы также называют '.astype ('категория', ...)' на других наборов данных? – IanS

+0

Да. Единственное различие в коде - это имена двух переменных в «UsersFullUnique = UsersFullLoc» и каждое упоминание UsersFullUnique. – user3394131

+0

Может ли это быть [ошибка] (https://github.com/pandas-dev/pandas/issues/10696)? Попытайтесь сначала сбросить его как строку, затем установите ее как категорию. – IanS

ответ

2

Это может быть ошибка, похожая на this one. Непосредственным решением было бы убедиться, что столбец уже не категория:

if UsersFullUnique.Placetype.dtype != 'category': 
    UsersFullUnique.Placetype = UsersFullUnique.Placetype.astype('category', 
            categories=[...], 
            ordered=True) 

более общая проблема заключается в том, что с UsersFullUnique = UsersFullLoc вы не делаете копию, а просто дать два имени к одному объекту, так что любые изменения сделанный на новом фрейме данных, также будет сделан на старом.

Если по какой-то причине вам нужно копию, вы должны использовать:

UsersFullUnique = UsersFullLoc.copy(deep=True) 
+0

Извините, я положил код на работу после того, как вы ответили, но для завершения (больших наборов данных) требуется много времени и занят последние два дня. Он работает, спасибо! – user3394131

Смежные вопросы