質問: pythonを使いはじめて2週間になります。 やりたいことは以下です。 1pandasを使って複数のCSVを読みこんで2行目のみをそれぞれから抽出 21つ目のCSVから抽出した行は1行目 2つ目のCSVから抽出した行は2行目・・・ と、いうふうにしたいのですが、 →できたことは ・フォルダにあるCSVを読み込む →あいまいorわからない ・なんとなく2行目もとりだせている気もするんですが。 ・結合のしかたがわかりません。 ・CSVに書き出しできたんですが、1個しか抽出できていなく、行列ひっくりかえっています。なぜですか? CSVは全部で120個 103行×103列の数字がはいっています。 いきなり120個でためすのも怖いのでまずは2個からやってみています。 どうしたらよいか教えてください。 ![プログラムです](https://i.stack.imgur.com/OzOT5.png)
回答: 多分こんな感じで動作するかと思います。 ``` dfs = [] for filename in filenames: df = pd.read_csv(filename, header=None) dfs.append(df.iloc[[1]]) merged_df = pd.concat(dfs, ignore_index=True) merged_df.to_csv('out.csv') ``` > > なんとなく2行目もとりだせている気もするんですが。 > > > とりあえず2行目データは `df.iloc[1]` にて取り出すことが出来るのですが、 `df.iloc[1]` の場合、戻り値は Series型 (一次元データ)となります。今回は DataFame型のまま行データとして取り出した方が都合がよいので `df.iloc[[1]]` とするほうが良いかと思います。 > > 結合のしかたがわかりません。 > > > 結合は質問のコードにコメントアウトで書かれている通り、`pandas.concat()` を使います。この引数としては結合したい DataFrame を全てリストに入れて呼び出す形をとりますので、ループの中では単にリストへの追加を行い、ループの外で1回呼び出すと良いかとおもいます。