2016-09-14 5 views
3

У меня есть dataframe, который выглядит, как этотPython GroupBy опускает столбцы

дг:

thing1 thing2 thing3 thing4 thing5 thing6 thing7 ID 
NAN  1  NAN NAN  NAN NAN  NAN 222 
NAN  NAN  3 NAN  NAN NAN  NAN 222 
NAN  NAN NAN 2  NAN NAN  NAN 222 
3  NAN NAN NAN  NAN NAN  3 222 
NAN  NAN NAN NAN  NAN NAN  NAN 222 
NAN  NAN NAN NAN  4 NAN  NAN 222 
NAN  NAN NAN NAN  NAN 4  NAN 222 
NAN  3  NAN  2  NAN NAN  NAN 555 
NAN  NAN  3 NAN  NAN NAN  NAN 555 
NAN  NAN NAN NAN  NAN NAN  NAN 555 

, когда я делаю GroupBy так:

dg = dg.groupby('ID').max().reset_index() 

производит следующий вывод, опуская две колонны, такие как:

ID thing2 thing3 thing4 thing5 thing7 
222 1  3  2  4  3 
555   3  2 

dataframe следует, что образец, но я не знаю, почему две колонки опущены

значения NAN являются np.nan

+2

Что такое вывод для 'dg.dtypes'? Являются ли недостающие столбцы определенно численными? –

+0

actallly Я обнаружил, что некоторые значения являются строковыми значениями «N/A», я постараюсь заменить их – Kalimantan

+0

. Вот и все! была случайная строка «N/A» в середине всех значений np.nan, что затрудняло обнаружение ошибки – Kalimantan

ответ

1

Я узнал, что я была строка «N/A» значение среди из моих значений np.nan. Урок - это строки с целыми числами, которые могут привести к исчезновению столбцов при выполнении групповых функций. Столбцы, у которых не было строки «N/A», не исчезали при выполнении функций groupby. Когда я заменил строки «N/A» на np.nan, столбцы не исчезли, когда я сделал группу

+1

'max (['N/A', 3, np.nan])' повышает TypeError. Когда функция агрегации вызывает ошибку, операция 'df.groupby (...). Max()' исключает этот столбец из результата. Вот почему в вашем исходном выпуске отсутствовали 2 столбца. – unutbu

+0

Итак, смесь всех трех подняла typeError? – Kalimantan

+0

Да, хотя сравнение * двух * объектов различного типа может быть достаточно, чтобы поднять 'TypeError'. В Python3 сравнение встроенных объектов разного (нечислового) типа вызывает 'TypeError'. Например, сравнение 'str' с' int', как в '' N/A '<3' или 'max ([' N/A ', 3])', вызывает 'TypeError'. В Python2 сопоставление различных типов [разрешено] (https://docs.python.org/2/library/stdtypes.html#comparisons). Учитывая поведение, которое вы описываете, вы должны использовать Python3. – unutbu

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