2013-07-03 4 views
4

У меня есть файл данных pandas, созданный с помощью вызова mysql, который возвращает данные как тип объекта.Преобразование Pandas Типы данных данных

Данные в основном числовые, с некоторыми значениями «na».

Как я могу наложить тип dataFrame так, чтобы числовые значения были правильно напечатаны (floats), а значения «na» представлены в виде numpy значений NaN?

ответ

1

Используйте метод замены на dataframes:

import numpy as np 
df = DataFrame({ 
'k1': ['na'] * 3 + ['two'] * 4, 
'k2': [1, 'na', 2, 'na', 3, 4, 4]}) 

print df 

df = df.replace('na', np.nan) 

print df 

Я думаю, что это полезно указать, что df.replace («на», np.nan) сама по себе не будет работать. Вы должны вернуть его к существующему файловому кадру.

+2

Вы можете использовать 'inplace = True' –

1

df = df.convert_objects(convert_numeric=True) будет работать в большинстве случаев.

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

+0

Это не работает, например 's = pd.Series ([1, 'na', 3, 4]); s.convert_objects (convert_numeric = True) ' –

+0

Хм, он работает для DataFrame. Думаю, они не используют одни и те же эвристики, чтобы переделать? EDIT: Я думаю, что приведенный вами пример не помог. Я работал с чем-то вроде '' 's = pd.DataFrame (['1', 'na', '3', '4']).' '' Это работает для этого. – TomAugspurger

+0

Кажется, что ... 'df = pd.DataFrame (s)': s created [github issue] (https://github.com/pydata/pandas/issues/4119) –

1

Это то, что предложил Том и правильно

In [134]: s = pd.Series(['1','2.','na']) 

In [135]: s.convert_objects(convert_numeric=True) 
Out[135]: 
0  1 
1  2 
2 NaN 
dtype: float64 

Как Энди отмечает, это не работает напрямую (я думаю, что это ошибка), поэтому преобразовать все строки элементов первой, а затем преобразовать

In [136]: s2 = pd.Series(['1','2.','na',5]) 

In [138]: s2.astype(str).convert_objects(convert_numeric=True) 
Out[138]: 
0  1 
1  2 
2 NaN 
3  5 
dtype: float64 
+0

, созданный [выпуск] (https://github.com/pydata/pandas/issues/4119) ... Я предполагаю, что стандартное требование что он уже должен быть преобразован до этого момента! –

+0

yep ... вот-вот создадим сам .... TOTD – Jeff

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