前提・実現したいこと
python
1 2df = pd.DataFrame({'A': A_key, 3 'B': B_key, 4 'C': C_key, 5 'D': D_key, 6 }) 7 8df_list.append(df)
for 文でdfを複数作りdf_listに格納しました。
dfを1つづつ取り出して、to_csv()で保存をすると大量のcsvファイルとして保存されてしまいます。df_listとして一つのファイルとして保存する方法を教えていただきたく思います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/22 10:00
回答3件
0
df_list に入っているデータフレームは全て同じ列名ですか?
はい。すべて同じ列名です。
テストデータを作成して試してみました。
python
1import pandas as pd 2import numpy as np 3 4df_list = [] 5 6df_list.append(pd.DataFrame({ 7 'A': [1], 'B': [2], 'C': [3], 'D': [4], 8})) 9 10df_list.append(pd.DataFrame({ 11 'A': [5, 9], 'B': [6, 10], 'C': [7, 11], 'D': [8, 12], 12})) 13 14df_list.append(pd.DataFrame({ 15 'A': [13, 17, 21], 'B': [14, 18, 22], 'C': [15, 19, 23], 'D': [16, 20, 24], 16})) 17 18for i, df in enumerate(df_list): 19 print(f'df_list[{i}]:\n{df}', end='\n\n') 20 21# Save to a CSV file 22with open('output.csv', 'w') as f: 23 for df in df_list: 24 df.to_csv(f, mode='a') 25 26# df_list 27df_list[0]: 28 A B C D 290 1 2 3 4 30 31df_list[1]: 32 A B C D 330 5 6 7 8 341 9 10 11 12 35 36df_list[2]: 37 A B C D 380 13 14 15 16 391 17 18 19 20 402 21 22 23 24
output.csv
csv
1,A,B,C,D 20,1,2,3,4 3,A,B,C,D 40,5,6,7,8 51,9,10,11,12 6,A,B,C,D 70,13,14,15,16 81,17,18,19,20 92,21,22,23,24
output.csv
を読み込んでデータフレームリストへ再構成します。
python
1df_list = pd.read_csv('output.csv') 2idx = [-1] + np.where(df_list.iloc[:,0].isnull())[0].tolist() + [len(df_list)] 3df_list = [ 4 df_list.iloc[(a+1):b][df_list.columns[1:]].reset_index(drop=True) 5 for a, b in zip(idx, idx[1:])] 6 7for i, df in enumerate(df_list): 8 print(f'df_list[{i}]:\n{df}', end='\n\n') 9 10# 11df_list[0]: 12 A B C D 130 1 2 3 4 14 15df_list[1]: 16 A B C D 170 5 6 7 8 181 9 10 11 12 19 20df_list[2]: 21 A B C D 220 13 14 15 16 231 17 18 19 20 242 21 22 23 24
投稿2021/11/22 16:28
総合スコア20655
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
復元可能だが人間に可読でなくても良いならpickleを使います。
python
1sample = [df0, df1, df2] 2import pickle 3with open('sample.pkl', 'wb') as f: 4 pickle.dump(sample,f) 5 6with open('sample.pkl', 'rb') as f: 7 restore = pickle.load(f) 8
人間に可読で復元可能でなくても良いならループで順に書き込みます。
python
1sample = [df0, df1, df2] 2with open('sample.csv', 'w') as f: 3 for df in sample: 4 df.to_csv(f) 5
すべて同じ列名です。ということであれば、以下が簡単でしょう。
python
1sample = [df0, df1, df2] 2pd.concat(sample).to_csv('sample.csv')
投稿2021/11/22 09:52
編集2021/11/23 00:49総合スコア24670
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。