2017-02-16 17 views
2

Я написал короткую функцию для вывода максимальных значений (или для строк, максимальной длины) для каждого столбца в кадре данных с настройками для различных типов данных.Pandas максимальная длина типа объекта без значений

def maxDFVals(df): 
    for c in df: 
     if str(df[c].dtype) in ('datetime64[ns]'): 
      print('Max datetime of column {}: {}\n'.format(c, df[c].max())) 
     elif str(df[c].dtype) in ('object', 'string_', 'unicode_'): 
      df[c].fillna(value='', inplace=True) 
      print('Max length of column {}: {}\n'.format(c, df[c].map(len).max())) 
     elif str(df[c].dtype) in ('int64', 'float64'): 
      print('Max value of column {}: {}\n'.format(c, df[c].max())) 
     else: 
      print('Unknown data type for column {}!\n'.format(c)) 

Он отлично работает, но я просто хотел, чтобы проверить, есть ли лучшая альтернатива линии 6, используя fillna, что мне нужно для того, чтобы иметь дело ни с ценностями. В идеале я бы просто проигнорировал None, но я не мог найти способ использовать что-то вроде skipna = True.

Если бы я действительно хотел, чтобы я предполагаю, что я мог бы добавить

  df[c].replace([''], [None], inplace=True) 

после строки 7, чтобы вернуть значения None, но это вряд ли то, что кто-то назовет вещий ...

Кто-нибудь есть какие-либо лучше предложения ?

+1

вы не можете попробовать это Df [с] .dropna() карта (LEN) .max() –

+0

Brilliant, спасибо большое @RakeshKumar –

ответ

1

Попробуйте это: -.

def maxDFVals(df): 
    for c in df: 
     if str(df[c].dtype) in ('datetime64[ns]'): 
      print('Max datetime of column {}: {}\n'.format(c, df[c].max())) 
     elif str(df[c].dtype) in ('object', 'string_', 'unicode_'): 
      print('Max length of column {}: {}\n'.format(c, df[c].dropna().map(len).max())) 
     elif str(df[c].dtype) in ('int64', 'float64'): 
      print('Max value of column {}: {}\n'.format(c, df[c].max())) 
     else: 
      print('Unknown data type for column {}!\n'.format(c)) 
+0

Да это работает рассматривать. Раньше использовали капну, но это полностью сошло с ума. Большое спасибо. –