我正在嘗試使用MysqlDB編寫一個熊貓數據框(或可以使用numpy數組)到mysql數據庫。 MysqlDB似乎並不理解'南',我的數據庫拋出一個錯誤,說南不在字段列表中。我需要找到一種方法將'nan'轉換爲NoneType。用無代替熊貓或Numpy Nan與MysqlDB一起使用
任何想法?
我正在嘗試使用MysqlDB編寫一個熊貓數據框(或可以使用numpy數組)到mysql數據庫。 MysqlDB似乎並不理解'南',我的數據庫拋出一個錯誤,說南不在字段列表中。我需要找到一種方法將'nan'轉換爲NoneType。用無代替熊貓或Numpy Nan與MysqlDB一起使用
任何想法?
@bogatron有它的權利,你可以使用,這是值得注意的是,你可以在熊貓本身做到這一點:
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
注意:你不能做重鑄DataFrames dtype
允許所有數據類型的類型,使用astype
,然後將數據幀fillna
方法:
df1 = df.astype(object).replace(np.nan, 'None')
不幸的是,這也不使用replace
,與None
一起使用,參見this (closed) issue。
順便說一句,這是值得注意的是,對於大多數使用情況下,你不需要用無以取代的NaN,看到這個問題有關the difference between NaN and None in pandas。
但是,在這個特定的情況下,它似乎你(至少在這個答案的時候)。
cripes,對不起,非常好的一點。也許你可以用'NULL'或'None'代替... –
使用pandas更新自己的'where'(奇怪的是不在文檔中!) –
參見文檔http://pandas.pydata.org/pandas-docs /stable/indexing.html#where-and-masking – Jeff
您可以在numpy的陣列替換nan
與None
:
>>> 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'>
唯一潛在的問題是'dtype'的變化,''x.dtype''是'dtype('float64')',而'y.dtype'是'dtype('object')'。 – Jaime
相當古老,但我偶然發現了同樣的問題。 試着這樣做:
df['col_replaced'] = df['col_with_npnans'].apply(lambda x: None if np.isnan(x) else x)
周圍絆倒後,這個工作對我來說:
df = df.astype(object).where(pd.notnull(df),None)
有沒有設置,可以在熊貓改變,使其返回'None'爲'NULL'而不是' nan'? –