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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

Q&A

2回答

1028閲覧

「フォルダの中のcsvを全て読み込む」を複数のフォルダに対してループで行いたい

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

0グッド

0クリップ

投稿2022/01/03 07:45

前提・実現したいこと

フォルダの中にあるcsvファイルを全て読み込んで縦積みにして一つのデータフレームに入れます。
フォルダは年毎に分かれていて、データフォームも年毎に分けます。

Python

1df_2015c = pd.DataFrame()# 空のDataFrameを定義 2for i in glob.glob("2015c/*.csv"): 3 tmp_df = pd.read_csv(i, encoding="shift-jis")# .csvを含むファイルをpd.read_csv()で読み込む 4 df_2015c = pd.concat([df_2015c, tmp_df])

というプログラムを書きましたが、年毎に分かれたフォルダが多いため、ループにして一気に処理したいです。
上記の2015の部分が年号で、ここを書き換えたいです。

Python

1l1= ['2015', '2016', '2017', '2018', '2019', '2020'] 2 3for i in l1: 4 exec(f"df{i}c = pd.DataFrame()") 5 exec(f"df{i}s = pd.DataFrame()") 6 exec(f"df{i}r = pd.DataFrame()") 7 8for i in l1: 9 for j in glob.glob("{i}c/*.csv"): 10 tmp_df = pd.read_csv(j, encoding="shift-jis")# .csvを含むファイルをpd.read_csv()で読み込む 11 exec(f"df{i}c = pd.concat([df{i}c, tmp_df])")

というコードを書きました。
エラーは出ませんが、データフレームにcsvファイルは読み込まれていませんでした。

アドバイスいただけますと幸いです。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Spyder 4.1.5
Python 3.7.0

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

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

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

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

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

ppaul

2022/01/03 08:37

というプログラムを書きましたが、年毎に分かれたフォルダが多いため、ループにして一気に処理したいです。 とのことですが、ループにする前のプログラムは思ったように動いたのですか?
退会済みユーザー

退会済みユーザー

2022/01/03 08:46

ループにする前のプログラムは思ったように動きました。 2015の部分を書き換えたものを2015年分から2020年分まで書きました。
guest

回答2

0

  • エラーは出ませんが、データフレームにcsvファイルは読み込まれていませんでした。

元のコードではdf_2015cを作成していますが、ループにしたコードではdf2015cなどを作成しています。
print(df2015c)とすれば表示されるのではないでしょうか。

ただし、こういうプログラムでexecを使うのは望ましくありません。
ふつうはDataFrameのリストか辞書を作ってそれを使うでしょう。

投稿2022/01/03 08:55

ppaul

総合スコア24666

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

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

退会済みユーザー

退会済みユーザー

2022/01/03 11:38

ppaulさま ありがとうございます。 Variable Explorerで確認しましたが、読み込まれていませんでした。
guest

0

その処理を関数にして、関数の引数はそのフォルダを与えるようにしときます
そうすれば、ループでフォルダを与えるだけでできるようになります

#ついでに格納するデータフレームも引数で与えましょうか

投稿2022/01/03 07:48

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2022/01/03 08:14

y_waiwaiさま アドバイスありがとうございます! 若葉マークつけ忘れたのですが、100枚付けたいくらい初心者なので、関数にするのがよくわかりません。 せっかく教えていただいたのに申し訳ないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問