pandasデータフレームでNoneをNaNに置き換えます


99

私はテーブルを持っていますx

        website
0   http://www.google.com/
1   http://www.yahoo.com
2   None

pythonNoneをpandasNaNに置き換えたいです。私は試した:

x.replace(to_replace=None, value=np.nan)

しかし、私は得ました:

TypeError: 'regex' must be a string or a compiled regular expression or a list or dict of strings or regular expressions, you passed a 'bool'

どうすればいいですか?

回答:


145

文字列ではなく、Pythonオブジェクトを置き換えるDataFrame.fillnaorSeries.fillnaを使用できNoneます'None'

import pandas as pd
import numpy as np

データフレームの場合:

df = df.fillna(value=np.nan)

列またはシリーズの場合:

df.mycol.fillna(value=np.nan, inplace=True)

3
SQLデータベースからデータをインポートした場合は、これを以下の回答と組み合わせることができます。これにより、None(文字列ではない)がNaNに変換されます。次に、df['column'].replace(nan, "", inplace=True)Noneを空の文字列にしたい場合は可能です。
VISQL 2018

1
これは答えは私にはうまくいきません。は置き換えられませんNone。マックスの答えはうまくいきます。
ダニエル

この列固有のソリューションが最も効果的であることがわかりましたdf['website'].replace(pd.np.nan, 0, inplace=True)。また、Pandasの組み込み参照に依存しているため、Numpyを含める必要はありません。
CodeMantle

2
pd.np.nan今与えるFutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead
Alex Povel

16

別のオプションは次のとおりです。

df.replace(to_replace=[None], value=np.nan, inplace=True)

3
df.replace([None]、np.nan、inplace = True)を実行すると、データが欠落しているすべての日時オブジェクトがオブジェクトdtypeに変更されることに注意してください。したがって、データのサイズによっては負担になる可能性のある日時にクエリを戻さない限り、クエリが壊れている可能性があります。
ダブルダウン

15

次の行は次のように置き換えNoneられNaNます。

df['column'].replace('None', np.nan, inplace=True)

それを再確認しただけで、私にとってはうまくいきます。エラーが発生したり、「なし」の値が置き換えられなかったりしますか?
Max Izadi 2018

注意:このメソッドはnp.nanfloat64パンダのobjectnan列のデフォルトのdtypeとは対照的に、float dtype(例:)を持つを使用します。
tehfink

6
注意:これにより、文字列がテキスト「None」に置き換えられますが、明示的なNone値(定数の場合はNone)は置き換えられません。
グレゴールMüllegger

4

df.replace([None]、np.nan、inplace = True)を使用すると、データが欠落しているすべての日時オブジェクトがオブジェクトdtypeに変更されます。したがって、データのサイズによっては負担になる可能性のある日時にクエリを戻さない限り、クエリが壊れている可能性があります。

このメソッドを使用する場合は、最初にdf内のオブジェクトdtypeフィールドを識別してから、Noneを置き換えることができます。

obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)

0
DataFrame['Col_name'].replace("None", np.nan, inplace=True)

1
こんにちは、stackoverflowへようこそ。お答えいただきありがとうございます。このコードは質問に答えるかもしれませんが、何を解決したのか、どのように解決したのかについての説明を追加することを検討できますか?これは、将来の読者があなたの答えをよりよく理解し、そこから学ぶのに役立ちます。
プルティアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.