パンダはNaNを空白/空の文字列に置き換えます


217

以下に示すようなPandas Dataframeがあります。

    1    2       3
 0  a  NaN    read
 1  b    l  unread
 2  c  NaN    read

空の文字列を持つNaN値を削除して、次のようにします。

    1    2       3
 0  a   ""    read
 1  b    l  unread
 2  c   ""    read

回答:


260
import numpy as np
df1 = df.replace(np.nan, '', regex=True)

これは役立つかもしれません。すべてのNaNを空の文字列に置き換えます。


1
どの図書館np.nanから来たのですか?使用できません
CaffeineConnoisseur

8
@CaffeineConnoisseur: import numpy as np
John Zwinck 16

26
@CaffeineConnoisseur-または、同様にしpd.np.nanたくない場合import numpy
elPastor 2017年

1
これはまた、dictのが.CSVの行の文字列として保存されることを可能にし、その後使用してデータフレームにリードバックpd.DataFrame.from_dict(eval(_string_))
yeliabsalohcin

5
... inplace=Trueオプションについて言及するのにも役立ちます。
smci

340
df = df.fillna('')

あるいは単に

df.fillna('', inplace=True)

これは、na(例えば、NaN)をで埋め''ます。

単一の列を埋める場合は、以下を使用できます。

df.column1 = df.column1.fillna('')

df['column1']代わりに使用できますdf.column1


5
@Mithril -df[['column1','column2']] = df[['column1','column2']].fillna('')
elPastor

99

ファイル(たとえばCSVまたはExcel)からデータフレームを読み取る場合は、次を使用します。

  • df.read_csv(path , na_filter=False)
  • df.read_excel(path , na_filter=False)

これは自動的に空のフィールドを空の文字列と見なします ''


すでにデータフレームがある場合

  • df = df.replace(np.nan, '', regex=True)
  • df = df.fillna('')

na_filterはread_excel()では使用できませんpandas.pydata.org/pandas-docs/stable/…–
Marjorie Roswell

アプリケーションで使用しました。それは存在しますが、何らかの理由で、ドキュメントでこの議論をしていません。エラーは発生しませんが、問題なく動作します。
Natesh bhat

動作します。パースで使用していますxl.parse('sheet_name', na_filter=False)
Dmitrii

5

印刷時にうまくレンダリングされるようにフォーマットするだけの場合は、フォーマッターを使用しますdf.to_string(... formattersDataFrameを不必要に変更したりメモリを浪費したりせずに、カスタム文字列フォーマットを定義するために使用するだけです。

df = pd.DataFrame({
    'A': ['a', 'b', 'c'],
    'B': [np.nan, 1, np.nan],
    'C': ['read', 'unread', 'read']})
print df.to_string(
    formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})

取得するため:

   A B       C
0  a      read
1  b 1  unread
2  c      read

4
print df.fillna('')単独では(を実行df = df.fillna('')せずに)、元のファイルも変更されません。使用する速度や他の利点はありto_stringますか?
18年

結構df.fillna('')ですよ!
Steve Schulist

@shadowtalker:必ずしもそうではありませんが、OPがdfを1つの形式(たとえば、計算効率が高い、または不要/空/重複の文字列でメモリを節約する)に維持し、さらに視覚的にそれをより多くレンダリングしたい場合にのみ正しい答えになります楽しい方法。ユースケースの詳細を知らなければ、私たちは確かに言うことはできません。
smci



0

DataFrameをJSONに変換する場合NaN、エラーが発生するので、このユースケースでの最善の解決策はで置き換えるNaNことNoneです。
方法は次のとおりです。

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

0

私はnanで文字列値の1列を試してみました。

ナンを削除して空の文字列を入力するには:

df.columnname.replace(np.nan,'',regex = True)

ナンを削除していくつかの値を入力するには:

df.columnname.replace(np.nan,'value',regex = True)

私もdf.ilocを試しました。ただし、列のインデックスが必要です。したがって、もう一度テーブルを調べる必要があります。単純に、上記の方法は1つのステップを削減しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.