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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

372閲覧

Excelの連結方法

LeonhardThird

総合スコア29

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/09/12 04:56

実現したいこと

ここにpandas.read_csvで読み取ってきたDataFrameが複数有るとします。
csv1つ1つをカラー化するのは(*1)のようなソースコードで出来たのですが、
その1つ1つカラー化したデータを以下のような1つにするにはどうすれば良いのでしょか?

      date symbol
0 2022-01-01 TREX  ←例えば赤
1 2022-01-02 TREX

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
date symbol
0 2022-01-01 00:00:00 TREX  ←例えば赤
1 2022-01-02 00:00:00 TREX
0          NaN NaN   ←見易いようにnan行を挿入
0 2022-01-03 00:00:00 MSFT  ←例えば青
1 2022-01-04 00:00:00 MSFT

(*1)のソースコード

python

1import csv, openpyxl, os, pandas as pd 2from openpyxl.styles import PatternFill 3full_path = os.path.join(folder_path, file_name) 4 5wb = openpyxl.Workbook() 6ws1 = wb.active 7# ws1 = wb['Sheet1'].active 8 9df = pd.read_csv(os.path.join(full_path)) 10for i in range(len(df)): 11 row = list(df.iloc[i]) 12 ws1.append(row) 13 14# set gray color cell fill 15fill_yellow = PatternFill(patternType='solid', fgColor='4287f5') 16fill_blue = PatternFill(patternType='solid', fgColor='ebdb34') 17 18# write in sheet 19for row in ws1: 20 for cell in row: 21 ws1[cell.coordinate].fill = fill_yellow 22 23# save target xlsx file 24wb.save(os.path.join(fp, 'temp.xlsx'))

サンプルデータ

python

1import datetime as dt, numpy as np 2data1 = {'date':[dt.datetime(2022,1,1), dt.datetime(2022,1,2)], 'symbol':['TREX', 'TREX']} 3data2 = {'date':[dt.datetime(2022,1,3), dt.datetime(2022,1,4)], 'symbol':['MSFT', 'MSFT']} 4df1 = pd.DataFrame(data1) 5df2 = pd.DataFrame(data2) 6df_list = [df1, df2] 7nan_row = pd.DataFrame([[np.nan]*2], columns=df1.columns) 8pd.concat([pd.concat([df, nan_row]) for df in df_list])

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

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

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

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

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

guest

回答1

0

自己解決

結局、以下のようにしてexcelに入力する時に値やカラーを設定することになりました。
そして連結の際はrowの番号を変更することで対処しました。

python

1for i in range(len(df.index)): 2 for j in range(len(df.columns)): 3 val = df.iloc[i][j] 4 ws.cell(column=j+1, row=i+1).value = val 5 ws.cell(column=j+1, row=i+1).fill = set_color

投稿2022/09/19 00:00

LeonhardThird

総合スコア29

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問