2017-02-15 3 views
0

Я хотел заменить значение NaN на пустое значение, чтобы записать его в базу данных mysql. Я не хочу падать (df.dropna()) в полный ряд, чтобы заменить его на 0, используя df.fillna(0). При использовании df.fillna('') или df.fillna('NULL') выдает сообщение об ошибке:Pandas Dataframe Значения NaN заменяются без значений

(mysql.connector.errors.DatabaseError) 1265 (01000): Данные усечены для столбца 'log_return' в строке

Данные в dataframe выглядит следующим образом:

  date  price  log_return     
0 2017-02-14  105.800 -0.006125       
1 2017-02-13  106.450 0.004236 
2 2017-02-10  106.000 NaN   

То, что я хочу следующее:

  date  price  log_return     
0 2017-02-14  105.800 -0.006125       
1 2017-02-13  106.450 0.004236 
2 2017-02-10  106.000 
+0

как вы хотите, чтобы данные, представленные в MYSQL? – putonspectacles

ответ

2

попробовать это:

df.where(pd.notnull(df), None)

пример

df = pd.DataFrame(np.eye(3)) 
df = df.where(lambda x: x==1, np.nan) 
df = df.where(pd.notnull(df), None) 

Обратите внимание, что pd.fillna (None) не будет работать, она оставляет NaN значения нетронутыми.

источник https://github.com/pandas-dev/pandas/issues/1972

+0

большое спасибо. Не знал, что с «Нет» это возможно :). – MCM

+0

Я был удивлен, узнав, что pd.fillna (None) не работает. Это обсуждается в ссылке, но поскольку он терпит неудачу и не упоминается напрямую ни в вопросе, ни в ответе, может быть полезно добавить примечание, чтобы не попробовать его ответить. –

+0

@BryanS спасибо, добавьте это в ответ. – putonspectacles

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