Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Почему при сортировке данных получаются числа в другом формате?

#python #python_3x #сортировка #pandas #dataframe


Имеются данные которые нужно подготовить к объединению с другим блоком данных. Для
этого хотелось бы хронологично упорядочить их. Пример исходных данных: 

df1

          pid  syear                   pgsbil               pgfamstd  \
0            101   1984   [3] Fachhochschulreife   [1] verheiratet zus.   
1            101   1985   [3] Fachhochschulreife   [1] verheiratet zus.   
2            101   1986   [3] Fachhochschulreife   [1] verheiratet zus. 
         ...    ...                      ...                    ... 
6            102   1984  [1] Hauptschulabschluss   [1] verheiratet zus.   
7            102   1985  [1] Hauptschulabschluss   [1] verheiratet zus.   
         ...    ...                      ...                    ... 
484168  31433802   2012   [2] Realschulabschluss   [1] verheiratet zus.   
484169  31433901   2012               [4] Abitur  [2] verheiratet getr. 


Я пробовал отсортировать используя код:  

DF1 = df1.sort_values(by='syear', ascending=1)


Но вместо года я получаю, по моему мнению, его в другой кодировке (как и всё остальное!):

Df1
Out[53]: 
           pid  syear                        pgsbil       pgfamstd  \
248899   320797655 -32656                            81            -95   
248825   891723238 -32419                            43             43   
250014   345587954 -32377                           NaN           -119   
           ...    ...                           ...            ...   
250163   957561202  31108                           -91             27   
250166   449665857  31554                            -1             -1   


Почему при сортировке данных получаются числа в другом формате? Как мне исправить это? 
    


Ответы

Ответ 1



похоже у вас в колонке syear или действительно отрицательные числа или, что скорее всего, большие положительные (больше 32767), которые при типе данных np.int16 превращаются в отрицательные... Демо: информация о max() и min() для типа np.int16: In [67]: np.iinfo(np.int16) Out[67]: iinfo(min=-32768, max=32767, dtype=int16) как из большого положительного целого (32880) получется отрицательное (-32656) при использовании типа np.int16: In [72]: df = pd.DataFrame({'a':[32880]}, dtype=np.int16) In [73]: df Out[73]: a 0 -32656 неправильные ("плохие") года: In [88]: df1.query('syear <= 1980 or syear > 2016').syear Out[88]: 248737 -9076 248738 -26593 248739 1725 248740 -25171 248741 7963 248742 27137 248743 19854 248744 26738 248745 6716 248746 9885 248747 19361 248748 -19726 248749 -24605 248750 24074 248751 -8070 248752 -16027 248753 -23424 248754 3848 248755 1471 248756 30634 248757 -8162 248758 -18937 248759 16733 248760 -21923 248761 16817 248762 3834 248763 -13556 248764 -16229 248765 24272 248766 25642 ... 252510 -1 252511 -1 252512 -1 252513 -1 252514 -1 252515 -1 252516 -1 252517 -1 Name: syear, dtype: int16 Интересное наблюдение - все "плохие" данные идут непрерывным блоком (с индексами: 248737 - 252517)

Ответ 2



Мне кажется это на самом деле такие данные, так как я сортирую по возрастанию, то самые странные такие значения становятся на первое место. Я попробовал команду: syear_counts = df1['syear'].value_counts() syear_counts 2000 24174 2002 23541 2006 22399 2003 22285 2001 21985 2004 21703 2011 21154 -1 3274 .... -17733 1 29884 1 24765 1 -11361 1 Скорей всего мне нужно выбросить как-то эту часть данных, которая не репрезентативная. Все строки которые соответствуют таким значениям.

Комментариев нет:

Отправить комментарий