質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

18265閲覧

Pythonで特定のカラムがnullの行を削除する

midsum0323

総合スコア40

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/05/16 09:35

###前提・実現したいこと
特定のカラムがnullの行を削除する方法を模索しています。
例えば、dfのA列にnullのある2行だけ削除したい、のような場合です。
dfはpandasのデータフレームです。

よろしくお願い申し上げます。

###発生している問題・エラーメッセージ
nullのある行数だけ削除されているが、df.isnull().sum()で調べると該当行が残っている。

###該当のソースコード
dfのA列がnullの行を削除するとする。
df.drop(df['A'].isnull())

###試したこと
df.dropna(subset=['A'])
⇒削除できず、行数も減っていない。
df[df['A'].isnull()]
⇒該当する行を表示させるために実行。該当行を抽出することに成功。

###補足情報(言語/FW/ツール等のバージョンなど)
3.6.0 |Anaconda 4.3.0 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)]
In [ ]:

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

通常は非破壊的な動作になりますので inplace=True をつけます。

python

1df.dropna(inplace=True)

投稿2017/05/16 09:53

driller

総合スコア720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

midsum0323

2017/05/16 10:41

ありがとうございます。解決いたしました。
guest

0

ベストアンサー

DataFrame.dropna() は(デフォルトでは)非破壊関数ですので、もとのデータフレームは変更されません。戻り値として、変更されたデータフレームが返りますのでそちらをお使いください。

Python

1import pandas as pd 2 3df = pd.DataFrame([[1,2,3],[4,5,6],[None,8,9],[10,None,12],[None,14.15]], columns=['A','B','C']) 4print(df) 5#=> A B C 6# 0 1.0 2.00 3.0 7# 1 4.0 5.00 6.0 8# 2 NaN 8.00 9.0 9# 3 10.0 NaN 12.0 10# 4 NaN 14.15 NaN 11 12df2=df.dropna(subset=['A']) 13 14print(df) 15#=> A B C 16# 0 1.0 2.00 3.0 17# 1 4.0 5.00 6.0 18# 2 NaN 8.00 9.0 19# 3 10.0 NaN 12.0 20# 4 NaN 14.15 NaN 21 22print(df2) 23#=> A B C 24# 0 1.0 2.0 3.0 25# 1 4.0 5.0 6.0 26# 3 10.0 NaN 12.0

DataFrame.dropna() を破壊関数で使用する場合は、引数にinplace=Trueを渡してください。(この場合の戻り値はNoneとなります)

Python

1import pandas as pd 2 3df = pd.DataFrame([[1,2,3],[4,5,6],[None,8,9],[10,None,12],[None,14.15]], columns=['A','B','C']) 4print(df) 5#=> A B C 6# 0 1.0 2.00 3.0 7# 1 4.0 5.00 6.0 8# 2 NaN 8.00 9.0 9# 3 10.0 NaN 12.0 10# 4 NaN 14.15 NaN 11 12df.dropna(subset=['A'], inplace=True) 13print(df) 14#=> A B C 15# 0 1.0 2.0 3.0 16# 1 4.0 5.0 6.0 17# 3 10.0 NaN 12.0

投稿2017/05/16 10:07

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

midsum0323

2017/05/16 11:16 編集

ありがとうございます。 df2=df.dropna(subset=['A']) で解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問