67843


[Pandasで条件に当てはまる列だけ同じ変換をしたい](https://ja.stackoverflow.com/questions/66954/pandas%e3%81%a7%e6%9d%a1%e4%bb%b6%e3%81%ab%e5%bd%93%e3%81%a6%e3%81%af%e3%81%be%e3%82%8b%e5%88%97%e3%81%a0%e3%81%91%e5%90%8c%e3%81%98%e5%a4%89%e6%8f%9b%e3%82%92%e3%81%97%e3%81%9f%e3%81%84)  
という質問を以前させていただき、回答をいただきましたがcontainsではなくstartswithやendswithのパターンの際は正規表現を利用する以外にやり方はありますでしょうか。

同じような質問になるかもしれませんが、  
[SASでのkeepはRやPythonではどのように書くのか](https://ja.stackoverflow.com/questions/44440/sas%e3%81%a7%e3%81%aekeep%e3%81%afr%e3%82%84python%e3%81%a7%e3%81%af%e3%81%a9%e3%81%ae%e3%82%88%e3%81%86%e3%81%ab%e6%9b%b8%e3%81%8f%e3%81%ae%e3%81%8b)  
のように、データフレーム上の列を選択して少なくしたいとき、q2_1~q2_4のような枝番付きのパターンをfor文で回すのではなくq2_nanなどの列も引っ掛けるようなパターンを知りたいです。


CC BY-SA 4.0
2020-06-10T18:34:53.050
67516
2020-06-20T17:03:39.230
2020-06-19T02:55:00.183
12457
12457
question
python pandas
pandasで列を選択する際、startswithやendswithと同じ操作を使いたい


しばらく回答が無いということは、例えば1行で指定できるような答えが無いということなのでは？

質問の内容がいまひとつ厳密で無い(何を言っているか良く分からない)ような感じを受けるのですが、こちらも理解しているわけでは無いので、こちらの分かる程度の内容で回答らしきものを書くと、以下のようになるでしょう。

つまり1行とか1文とかの短くまとまった記述では出来そうも無いので、何段階か手順を組み合わせれば出来るのでは？ ということです。

  1. カラム名文字列のリストを取得する  
`pandas.DataFrame.columns.values.tolist()`で(少し高速に)取れるようです。  
[Is pandas.DataFrame.columns.values.tolist() the same as
pandas.DataFrame.columns.tolist()](https://stackoverflow.com/q/45152534/9014308)

  2. リスト内包表記とかで抽出したいカラム名を検索して選択する  
startswith,endswith,re.matchとか色々と使えるでしょう。  
[Pythonで文字列のリスト（配列）の条件を満たす要素を抽出、置換](https://note.nkmk.me/python-list-str-
select-replace/)  
あるいは次の処理のために、抽出したカラム名のリストをインデックス番号のリストに変換することも考えられます。

  3. 出来たリストを使って処理の対象や抽出の対象としてパラメータに指定する  
質問の参照記事のような形でも良いでしょうし、以下記事のようにでも出来るでしょう。  
[slice pandas dataframe to get noncontiguous
columns](https://stackoverflow.com/q/48613671/9014308)  
[Pandas Dataframe select multiple discontinuous
columns/slices](https://stackoverflow.com/q/50143469/9014308)  
[pandas dataframe indexing by
columns](https://stackoverflow.com/q/45152177/9014308)


CC BY-SA 4.0
2020-06-20T17:03:39.230
67843
2020-06-20T17:03:39.230
26370
67516
answer