質問: Pandasで条件に当てはまる列だけ同じ変換をしたい という質問を以前させていただき、回答をいただきましたがcontainsではなくstartswithやendswithのパターンの際は正規表現を利用する以外にやり方はありますでしょうか。 同じような質問になるかもしれませんが、 SASでのkeepはRやPythonではどのように書くのか のように、データフレーム上の列を選択して少なくしたいとき、q2_1~q2_4のような枝番付きのパターンをfor文で回すのではなくq2_nanなどの列も引っ掛けるようなパターンを知りたいです。
回答: しばらく回答が無いということは、例えば1行で指定できるような答えが無いということなのでは? 質問の内容がいまひとつ厳密で無い(何を言っているか良く分からない)ような感じを受けるのですが、こちらも理解しているわけでは無いので、こちらの分かる程度の内容で回答らしきものを書くと、以下のようになるでしょう。 つまり1行とか1文とかの短くまとまった記述では出来そうも無いので、何段階か手順を組み合わせれば出来るのでは? ということです。 1. カラム名文字列のリストを取得する `pandas.DataFrame.columns.values.tolist()`で(少し高速に)取れるようです。 Is pandas.DataFrame.columns.values.tolist() the same as pandas.DataFrame.columns.tolist() 2. リスト内包表記とかで抽出したいカラム名を検索して選択する startswith,endswith,re.matchとか色々と使えるでしょう。 Pythonで文字列のリスト(配列)の条件を満たす要素を抽出、置換 あるいは次の処理のために、抽出したカラム名のリストをインデックス番号のリストに変換することも考えられます。 3. 出来たリストを使って処理の対象や抽出の対象としてパラメータに指定する 質問の参照記事のような形でも良いでしょうし、以下記事のようにでも出来るでしょう。 slice pandas dataframe to get noncontiguous columns Pandas Dataframe select multiple discontinuous columns/slices pandas dataframe indexing by columns