Замена панд или Numpy Nan на None для использования с MysqlDB
Я пытаюсь написать фрейм данных Pandas (или могу использовать массив numpy) в базу данных mysql с помощью MysqlDB . MysqlDB, похоже, не понимает "nan", и моя база данных выдает ошибку, говоря, что nan нет в списке полей. Мне нужно найти способ преобразовать ' nan ' в NoneType.
какие идеи?
4 ответов:
@bogatron имеет право, вы можете использовать
whereстоит отметить, что вы можете сделать это изначально в панд:df1 = df.where((pd.notnull(df)), None)Примечание: это изменяет dtype все столбцы до
object.пример:
In [1]: df = pd.DataFrame([1, np.nan]) In [2]: df Out[2]: 0 0 1 1 NaN In [3]: df1 = df.where((pd.notnull(df)), None) In [4]: df1 Out[4]: 0 0 1 1 None
Примечание: то, что вы не можете сделать переделать фреймы данных
dtypeразрешить все типы данных, используяastype, а затем фрейм данныхfillnaметод:df1 = df.astype(object).replace(np.nan, 'None')к сожалению ни это, ни использование
replace, работает сNoneпосмотреть этот (закрытый) вопрос.
в стороне, стоит отметить, что для большинства случаев использования вам не нужно заменять NaN на None, см. Этот вопрос о разница между NaN и None в панд.
однако, в этом конкретном случае кажется, что вы делаете (по крайней мере, на время этого ответа).
вы можете заменить
nanСNoneв вашем массиве numpy:>>> x = np.array([1, np.nan, 3]) >>> y = np.where(np.isnan(x), None, x) >>> print y [1.0 None 3.0] >>> print type(y[1]) <type 'NoneType'>
довольно старый, но я наткнулся на тот же вопрос. Попробуйте сделать это:
df['col_replaced'] = df['col_with_npnans'].apply(lambda x: None if np.isnan(x) else x)
Comments