###はじめに
初投稿です.
無礼な書き方をしていたらすみません.無礼であった点がある場合,指摘していただけると幸いです.
私は,初めてpythonを触っているためできるだけわかりやすく説明していただけるとありがたいです.
前提・実現したいこと
開発環境Atomのpythonを用いて株式投資メモ様(https://kabuoji3.com/)から個別株価データをスクレイピングしデータの結合を行うプログラムを作成しています.(補足情報前に全体のプログラムを載せます.)
私が解決したいのはclass '_io.TextIOWrapper'をどうにかしてcsvファイルの縦での結合を行うことです.
動作としてはcsvファイルのダウンロード,ディレクトリ変更を行った後にresult.csvに数年分の個別株の結合プログラムを実行させているのですが,result.csvを作成し終えて結合するときに以下のエラーメッセージが表示されます.
発生している問題・エラーメッセージ
Traceback (most recent call last): File "ファイルパス\download02_csv.py", line 68, in <module> link_csv(6098,2015,4) File "ファイルパス\download02_csv.py", line 56, in link_csv result = pd.concat([result,file01],axis='index') File "ファイルパス\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pandas\core\reshape\concat.py", line 281, in concat sort=sort, File "ファイルパス\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pandas\core\reshape\concat.py", line 357, in __init__ raise TypeError(msg) TypeError: cannot concatenate object of type '<class '_io.TextIOWrapper'>'; only Series and DataFrame objs are valid
該当のソースコード
python
1def link_csv(code,year,loops): 2 result = open('data/service11/csv/{}/result.csv'.format(code), 'x') 3 for year in range(year,year + loops): 4 try: 5 file01 = 'data/service11/csv/{}/{}_{}.csv'.format(code,code,year) 6 result = pd.concat([result,file01],axis='index') 7 8 except Exception as e: 9 raise 10 11link_csv(6098,2015,4)
試したこと
TypeError: cannot concatenate object of type '<class '_io.TextIOWrapper'>'; only Series and DataFrame objs are valid と書かれていたのでfloat型に書き換えればよいと思い以下のプログラムを実行させました.
python
1with open('ファイルパス/data/service11/csv/6098/6098_2015.csv') as f: 2 print(f.read()) 3 print(type(f)) 4 print(type(float(f))) 5 print(type(f))
しかし,以下のエラーメッセージがでました.
Traceback (most recent call last): File "ファイルパス\download02_csv.py", line 18, in <module> print(type(float(f))) TypeError: float() argument must be a string or a number, not '_io.TextIOWrapper'
###全体のプログラム
python
1''' 2参考サイト 3(csvファイルのダウンロード)https://www.kbm360.com/?p=278 4''' 5from selenium import webdriver 6from selenium.common.exceptions import NoSuchElementException 7import time 8import os 9import shutil 10import pandas as pd 11import csv 12from datetime import datetime 13driver = webdriver.Chrome("ファイルパス/chromedriver_win32/chromedriver.exe") 14""" 15with open('ファイルパス/data/service11/csv/6098/6098_2015.csv') as f: 16 print(f.read()) 17 print(type(f)) 18 print(type(float(f))) 19 print(type(f)) 20""" 21 22#csvファイルのダウンロード関数 23def download_stock_csv(code,year_range): 24 for year in year_range: 25 url = 'https://kabuoji3.com/stock/{}/{}/'.format(code,year) 26 driver.get(url) 27 try: 28 driver.find_element_by_name("csv").click() 29 time.sleep(2) 30 driver.find_element_by_name("csv").click() 31 except NoSuchElementException: 32 print("nodata") 33 pass 34 35 time.sleep(1) 36 37#csvファイルの移動関数 38def move_csv(code,year_range): 39 os.makedirs('data/service11/csv/{}'.format(code), exist_ok=True) 40 for year in year_range: 41 Original_csv = 'C:/Users/ユーザー名/Downloads/{}_{}.csv'.format(code,year) 42 Destination_csv = 'data/service11/csv/{}/{}_{}.csv'.format(code,code,year) 43 try: 44 shutil.move(Original_csv,Destination_csv) 45 except Exception as e: 46 raise 47 pass 48 49#csvファイルの結合 50def link_csv(code,year,loops): 51 result = open('data/service11/csv/{}/result.csv'.format(code), 'x') 52 for year in range(year,year + loops): 53 try: 54 file01 = 'data/service11/csv/{}/{}_{}.csv'.format(code,code,year) 55 result = pd.concat([result,file01],axis='index') 56 57 except Exception as e: 58 raise 59 60#フォルダ作成 61os.makedirs('data/service11/html_souce', exist_ok=True) 62os.makedirs('data/service11/graph', exist_ok=True) 63os.makedirs('data/service11/csv', exist_ok=True) 64 65download_stock_csv(6098,range(2015,2020)) 66move_csv(6098,range(2015,2020)) 67link_csv(6098,2015,4) 68
補足情報(FW/ツールのバージョンなど)
2020年2月1日時点での最新バージョンを基本的に使用しています.
・python 3.7.6
・pip3でモジュールのインストール
###解決策
無駄な部分があると思いますが,以下のようにして修正したところ無事解決できました.
python
1#csvファイルの結合 2def link_csv(code, year, loops): 3 with open('data/service11/csv/{}/result.csv'.format(code),"w"):pass 4 result = pd.DataFrame() 5 for year in range(year,year + loops): 6 try: 7 file01 = pd.read_csv('data/service11/csv/{}/{}_{}.csv'.format(code,code,year), encoding="cp932", header = 1) 8 result = pd.concat([result,file01],axis='index') 9 except Exception as e: 10 raise 11 result.to_csv('data/service11/csv/{}/result.csv'.format(code), index = False, encoding="cp932")
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/06 16:50