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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

511閲覧

[python]pandas での複数行削除について

Dadada_c.

総合スコア59

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/10/28 22:11

編集2018/10/28 23:36

#pandasで複数行を削除したい

python

1 A B C 21 fuga a 32 hoge a 1 43 hoge a 54 hoge a 1 6

上記の様なデータフレームがあります。
Aが「hoge」でCが「ブランク」の場合その行をすべて削除したいです。

python

1df_6.dropna(subset=['C'] ,inplace=True)

を試しましたが、当然の様に、1行目の「fuga」の行まで削除されてしまいます。
この場合、どのように条件していすればいいかわからずご質問させて頂きました。

何卒宜しくお願い致します。

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

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

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

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

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

tachikoma

2018/10/28 23:23

BじゃなくてCが「ブランク」の条件ですかね。
Dadada_c.

2018/10/28 23:36

すみません。そのとおりです!よろしくお願いします。
guest

回答2

0

ベストアンサー

df = df[(df.B != 'hoge') | df.C.notna()]

で良いのではないでしょうか

投稿2018/10/29 00:02

magichan

総合スコア15898

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

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

tachikoma

2018/10/29 00:11

今回の質問での必要性か分からないので単なる質問になるのですが、この書き方ってinplace操作に対応できます?つまり、すでにdfの参照を保持しているオブジェクトにも変更が反映されるかどうかということなのですが。
magichan

2018/10/29 01:14

tachikomaさんが心配されていることはたぶん『一時的にでもDataFrameのコピーが発生するので、OnMemoryギリギリのデータの場合は無理なのでは?』ということですよね。 はい。それはその通りだと思います。 質問者さんが inplace をそのような意図で使用しているのであればこの方法はNGかと思います。 ただ 数百MB程度のデータでは問題になるともありませんし、drop() 使うより高速で動作しますのであとは用途に合わせて選択するとよいのではないでしょうか。
tachikoma

2018/10/29 01:43

ありがとうございます。メモリの心配というより、dropを(ユーザー定義の)関数内でinplace処理するのを期待してるのだとすると・・・と想像しました(もちろん返り値で渡してあげればいいだけなのですが)。私もこの書き方がいいと思います。
Dadada_c.

2018/10/29 11:42

tachikomaさんもmagichanさんもいつも助けて頂いて本当にありがとうございます! おかげさまで少しだけですがpythonが読める様になってきました。本当にいつもしょうもない質問に真摯にご回答くださいまして感謝しております。今後とも色々とご指導お願い致します。
guest

0

ちょっと読みにくいですが、こんな感じですかね。

df.drop( df[ (df["A"] == "hoge") & (df["C"].isna())] .index, inplace=True )

投稿2018/10/28 23:58

tachikoma

総合スコア3601

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問