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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

CSV

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

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

1294閲覧

pythonにおいてスクレイピングしたcsvをマージする際にでるclass '_io.TextIOWrapper'をデータフレームにしたい

Okachan

総合スコア9

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

CSV

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

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/02/06 09:41

編集2020/02/06 17:04

###はじめに
初投稿です.
無礼な書き方をしていたらすみません.無礼であった点がある場合,指摘していただけると幸いです.
私は,初めて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")

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージに云われている通り、[result,file01]のどちらもDataFrame(またはSeries)でなければなりません。
ファイルをDataFrameとして読み込んだうえで処理しましょう。

投稿2020/02/06 11:06

can110

総合スコア38341

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

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

Okachan

2020/02/06 16:50

@can110様 ご回答ありがとうございました.私が求めていたプログラムができました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問