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

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

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

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

0回答

1436閲覧

Djangoでpandasを使って作ったdfをcsv出力したい

ktg_st

総合スコア33

CSV

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

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/06/05 11:33

djangoでpandasを使いdfを作成し、テンプレート表示を行いました。
その表示されているdfをcsvで出力したいです。

mixins.py class ShopShiftWithScheduleMixin(WeekCalendarMixin): def get_week_schedules(self, start, end, days): shop = get_object_or_404(Shops, pk=self.kwargs['shops_pk']) user= User.objects.filter(shops__shop=shop) b =[] for a in user: b.append(a) print(b) lookup = { '{}__range'.format(self.date_field): (start, end), } queryset = self.model.objects.filter(**lookup) days = {day: [] for day in days} df = pd.DataFrame(days) a=1 for schedule in queryset: if schedule.user in b: if a == 1: user=schedule.user.last_name+' '+schedule.user.first_name date= schedule.date start_time=schedule.get_start_time_display() end_time = schedule.get_end_time_display() time = start_time+'-'+end_time ddf =pd.DataFrame({date:time},index =[user]) df = pd.concat([df,ddf],axis=0) df.fillna(" ", inplace=True) a = 2 if user != schedule.user.last_name+' '+schedule.user.first_name: user=schedule.user.last_name+' '+schedule.user.first_name date= schedule.date start_time=schedule.get_start_time_display() end_time = schedule.get_end_time_display() time = start_time+'-'+end_time ddf =pd.DataFrame({date:time},index =[user]) df = pd.concat([df,ddf],axis=0) df.fillna(" ", inplace=True) else: user=schedule.user.last_name+' '+schedule.user.first_name date= schedule.date start_time=schedule.get_start_time_display() end_time = schedule.get_end_time_display() time = start_time+'-'+end_time ddf =pd.DataFrame({date:time},index =[user]) df[date]= df[date].astype(str) df.at[user,date] =time df.fillna(" ", inplace=True) df.fillna(" ", inplace=True) return df def get_week_calendar(self): calendar_context = super().get_week_calendar() calendar_context['df'] = self.get_week_schedules( calendar_context['week_first'], calendar_context['week_last'], calendar_context['week_days'] ) return calendar_context

mixinで期間とユーザーを指定して、dfを返しています。
ここのdfをcsv出力したいです。

views.py class ShopShiftList(mixins.ShopShiftWithScheduleMixin, generic.TemplateView): model = Schedule template_name = 'shift/shopshift_list.html' date_field = 'date' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) shop = get_object_or_404(Shops, pk=self.kwargs['shops_pk']) context['shops']= User.objects.filter(shops__shop=shop) calendar_context = self.get_week_calendar() context.update(calendar_context) return context

上記がdf表示のviewです。

html <table border="1"> <th>User</th> {% for day in df %} <th>{{day | date:"j" }}日<small>({{ day | date:"D" }})</small></th> {% endfor %} {% for index,row in df.iterrows %} <tr> <th>{{index}}</th> <td>{{row.0}}</td> <td>{{row.1}}</td> <td>{{row.2}}</td> <td>{{row.3}}</td> <td>{{row.4}}</td> <td>{{row.5}}</td> <td>{{row.6}}</td> <td>{{row.7}}</td> <td>{{row.8}}</td> <td>{{row.9}}</td> <td>{{row.10}}</td> <td>{{row.11}}</td> <td>{{row.12}}</td> <td>{{row.13}}</td> <td>{{row.14}}</td> {% if row.15 == True %} <td>{{row.15}}</td> {% else %} {% endif %} </tr> {% endfor %} </table> <form method="POST" > <button type="submit" class="btn btn-primary">csv</button>{% csrf_token %} </form>

to_csvで作成出来る事は分かったのですが、どういう記載にすればいいのか分かりません。
ボタンを押しPOSTされCSV作成と言う流れになると思うのですが、defで書く場所が
1.mixin.py内
2.viewsの上記class内
3.viewsの上記class外
どこに書けばいいのかもわかりません。

上記view内で
df=context['df']
df.to_csv('aaaaa.csv')
とした所、辞書はcsv出力できない、とエラーになりました。

よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問