MysqlDBを使用して、Pandasデータフレームをmysqlデータベースに書き込もうとしています(またはnumpy配列を使用できます)。 MysqlDBが 'nan'を理解していないように見えて、データベースがフィールドリストにないというエラーをスローします。私は 'nan'をNoneTypeに変換する方法を見つける必要があります。PandasまたはNumpy NanをNoneに置き換えてMysqlDBと一緒に使用する
アイデア?
MysqlDBを使用して、Pandasデータフレームをmysqlデータベースに書き込もうとしています(またはnumpy配列を使用できます)。 MysqlDBが 'nan'を理解していないように見えて、データベースがフィールドリストにないというエラーをスローします。私は 'nan'をNoneTypeに変換する方法を見つける必要があります。PandasまたはNumpy NanをNoneに置き換えて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
注:astype
を使用して、すべてのデータ型の種類を許可するようにデータフレームdtype
を作り直すことができないものを、その後、データフレームfillna
方法:
df1 = df.astype(object).replace(np.nan, 'None')
残念なことに、これもreplace
を使用してもNone
と動作しません。this (closed) issue。余談として
が、それはほとんどのユースケースのためにあなたなしではNaNを交換する必要がないことは注目に値します、この質問についてthe difference between NaN and None in pandasを参照してください。
しかし、この特定のケースでは、(この回答の時点では)あなたがそう思われます。
クライテリア、それを残念、非常に良い点。おそらく、あなたは代わりに 'NULL'または 'None'を使用することができます... –
は、pandas独自の 'where'を使用して更新されました(不思議なことに、ドキュメントにありません!) –
docs http://pandas.pydata.org/pandas-docs /stable/indexing.html#where-and-masking – Jeff
あなたがnumpyの配列にNone
でnan
を置き換えることができます。
>>> 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)
にはあなたはそれが代わりに '' NULL'ため 'NONE'を返す作るためにパンダに変更できる設定はありませんナノ? –