Pythonでcsvデータを新規作成したExcelに読み込み処理を自動化したいと考えております。
数値データが文字列として読み込まれてしまい、解決方法を探しています。
対象の範囲だけ数値で読み込む、もしくは数値に変換する方法をご教示いただけませんでしょうか。
読み込むCSVデータ構成
cost.csv
1ID,012,035,123 2アカウント名,あああああ,かかかかか,ははははは 32021/1/1,45678,12345,98765 42021/2/1,34567,11234,98652
- カンマ区切りの複数行データです。
- 各行の先頭に見出しがあります。
- 1行目はIDで先頭に0がつく場合があります(文字列で読み込みたい)
- 3・4行目の日付以外は数値で読み込みを行いたい(Excel読み込み後に計算したい)
記載したpythonのコード
python
1#ライブラリを取り込む 2import openpyxl as excel 3import csv 4from datetime import datetime 5 6#新規ワークブックを作る 7book = excel.Workbook() 8 9#sheetの作成 10sheet = book.active 11 12#CSV読み込みファイル名指定 13csv_filename="cost.csv" 14 15#CSVファイルを開く 16with open(csv_filename, encoding="utf-8",newline="") as csvf: 17 #CSVファイルからデータを読み込む 18 data=csv.reader(csvf) 19 20 r=1 21 for line in data: 22 c=1 23 for v in line: 24 sheet.cell(row=c,column=r).value=v 25 c += 1 26 r += 1 27 28#年月を取得 29now = datetime.now() 30 31#ファイルを保存 32book.save('前月比較{}.xlsx'.format(now.strftime('%Y%m'))) 33 34#ファイルを閉じる 35book.close() 36
上記を実行すると、行列を入れ替えた状態でExcelに正常に読み込まれるのですが、1点課題があります。
各月の数値の値がテキスト形式(文字列)として読み込まれてしまっています。
試みたこと
そのため以下の処理を試みてみましたが、うまくいきません。
- 値をfloat形式で読み込む
- 書式設定を数値に指定する
以下が変更したコードになります。
python
1(省略) 2#CSVファイルを開く 3with open(csv_filename, encoding="utf-8",newline="") as csvf: 4 #CSVファイルからデータを読み込む 5 data=csv.reader(csvf) 6 7 r=1 8 for line in data: 9 10 c=1 11 for v in line: 12 if r>=2 and c>=3: 13 sheet.cell(row=c,column=r).number_format='#,##0' 14 sheet.cell(row=c,column=r).value=float(v) 15 else: 16 sheet.cell(row=c,column=r).value=v 17 c += 1 18 r += 1 19(省略) 20
補足
CSVから読み込んだデータをpython上でprint確認したところ、以下のように文字列として処理されていました
python
1[`ID`,`012`,`035`,`123`] 2[`アカウント名`,`あああああ`,`かかかかか`,`ははははは`] 3[`2021/1/1`,`45678`,`12345`,`98765`] 4[`2021/2/1`,`34567`,`11234`,`98652`]
今日1日色々調べて様々な方法で記述変更して試しているのですが、解決方法がわからずご質問いたしました。
*Python初学者で色々調べながらここまで来ましたが、基礎的な理解が足りていないと思います。
ただ、まず一つ形にしてみたく…助言いただけますと幸いです。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/25 12:09 編集
2022/02/25 12:44
2022/02/25 15:05 編集
2022/02/25 22:21
2022/02/26 05:00