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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

pandas

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

Q&A

解決済

1回答

5446閲覧

株価データを結合したい

daic

総合スコア12

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

pandas

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

0グッド

1クリップ

投稿2020/07/09 06:04

編集2020/07/10 13:47

前提・実現したいこと

「Tensorflowではじめる株式投資のためのディープラーニング」という本で学んでいます。
株価データをKABU+からダウンロードし、データを結合したいのですが、エラーが解決できずに悩んでいます。データは下記のように置いています。
イメージ説明

発生している問題・エラーメッセージ

ValueError Traceback (most recent call last) <ipython-input-3-cf0c4fc04483> in <module> 8 price_data.append(data_.assign(日時=timestamp)) 9 ---> 10 price_data = pd.concat(price_data).assign( 11 日時=lambda x: x['日時'].map( 12 lambda elm: pd.Timestamp(pd.to_datetime(elm).date()) # 時刻をすべて00:00:00に合わせる ~/venv/list/lib/python3.7/site-packages/pandas/core/reshape/concat.py in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy) 279 verify_integrity=verify_integrity, 280 copy=copy, --> 281 sort=sort, 282 ) 283 ~/venv/list/lib/python3.7/site-packages/pandas/core/reshape/concat.py in __init__(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort) 327 328 if len(objs) == 0: --> 329 raise ValueError("No objects to concatenate") 330 331 if keys is None: ValueError: No objects to concatenate

該当のソースコード

Python

1import re 2import pandas as pd 3from tqdm import tqdm_notebook as tqdm 4from os import path 5from pathlib import Path 6 7DATA_DIR = '/User/username/Stock_predict/download_data' # データをダウンロードしたフォルダ 8PRICE_DIR = path.join(DATA_DIR, 'japan-all-stock-prices') # 株価一覧表 9STOCK_DATA_DIR = path.join(DATA_DIR, 'japan-all-stock-data') # 投資指標データ 10FIN_RESULTS_DIR = path.join(DATA_DIR, 'japan-all-stock-financial-results') # 決算・財務・業績データ 11OUT_DIR = '/User/username/Stock_predict' # 結合したデータを保存するフォルダ 12 13 14price_data = [] 15file_list = list(Path(PRICE_DIR).glob('*.csv')) # PRICE_DIR以下にあるcsvファイルのパスをすべて取得する 16 17for file in tqdm(file_list): 18 data_ = pd.read_csv(f'file:{file}', encoding='sjis', na_values='-') 19 data_.columns = [column.strip() for column in data_.columns] # カラム名にスペースが混じることがあるので削除 20 timestamp = pd.Timestamp(re.findall(r'\d{8}', file.stem)[0]) # 日時はファイル名から取得 21 price_data.append(data_.assign(日時=timestamp)) 22 23price_data = pd.concat(price_data).assign( 24 日時=lambda x: x['日時'].map( 25 lambda elm: pd.Timestamp(pd.to_datetime(elm).date()) # 時刻をすべて00:00:00に合わせる 26 ) 27)

補足情報(FW/ツールのバージョンなど)

pandas==1.0.3 , tqdm==4.45.0, jupyterlab==2.1.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

ValueError: No objects to concatenate
結合するためのオブジェクトがありませんと言われています。price_dataが空のリストになっていないか確認してみてください。

試したコード。これは普通に動きました。

python3

1import re 2import pandas as pd 3from tqdm import tqdm_notebook as tqdm 4from os import path 5from pathlib import Path 6 7DATA_DIR = './sample/data/download_data' # データをダウンロードしたフォルダ 8PRICE_DIR = path.join(DATA_DIR, 'japan-all-stock-prices') # 株価一覧表 9STOCK_DATA_DIR = path.join(DATA_DIR, 'japan-all-stock-data') # 投資指標データ 10FIN_RESULTS_DIR = path.join(DATA_DIR, 'japan-all-stock-financial-results') # 決算・財務・業績データ 11OUT_DIR = 'C:/sample/data' # 結合したデータを保存するフォルダ 12 13 14price_data = [] 15file_list = list(Path(PRICE_DIR).glob('*.csv')) # PRICE_DIR以下にあるcsvファイルのパスをすべて取得する 16print(file_list) 17# [WindowsPath('sample/data/download_data/japan-all-stock-prices/1.csv'), WindowsPath('sample/data/download_data/japan-all-stock-prices/2.csv')] 18for file in tqdm(file_list): 19 data_ = pd.read_csv(f'file:{file}', encoding='sjis', na_values='-') 20 print(data_)

投稿2020/07/09 07:15

編集2020/07/10 05:20
jeanbiego

総合スコア3966

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

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

daic

2020/07/09 11:03

回答ありがとうございます。 ご指摘通りprice_dataが空のリストとなっていました。 ソースコードの8行目でフォルダのパスは取得できているのに、15行目でそのフォルダ(japan-all-stock-prices)の中のcsvファイルを取得できません。 フォルダの中にはcsvファイルが入っているのに取得できないのは何故でしょうか?
jeanbiego

2020/07/09 23:23

パスに誤字等ないですか。file_listの中身を確認してください 同様のコードでファイルが取得できることは確認しました。
daic

2020/07/10 05:06

コメントありがとうございます。 上記の画像で言うとdownload_dataというフォルダの中にjapan-all-stock-pricesというフォルダがあり、その中にcsvファイルがあるという認識で合っていますか?
jeanbiego

2020/07/10 05:21

Cドライブに余計なディレクトリを作りたくなかったので、別のとこに下記作ってCSV入れてみました。 \sample\data\download_data\japan-all-stock-prices 普通に、file_listとdata_が取得できています。
daic

2020/07/10 11:56 編集

画像のファイル構造はWindowsですが、私はMacを使っています。 /User/username/Stock_predict/download_data/japan-all-stock-pricesというファイル構造です。 コードするとどのようになるのでしょうか?
jeanbiego

2020/07/10 05:49

回答欄にコード貼ってあります。 print(data_)でcsvの中身が表示されてます。
daic

2020/07/10 06:23

Mac OSで8行目と15行目のコードはどのようになるのでしょうか?
jeanbiego

2020/07/10 06:55

MacOSで違いがあるかは存じません。 それよりも、ご自分の環境で手を動かして一つずつ確かめるのが良いかと。たとえば下記の例のように一番簡単なコードとパスを書いてみて、それで動作するのかしないのか、何故しないのかを確かめてみて下さい。 file = "xxx/User/username/Stock_predict/japan-all-stock-prices/xxx.csv" data_ = pd.read_csv(file)
daic

2020/07/10 07:59

ご指摘ありがとうございます。 実行してみた結果、FileNotFoundErrorとなってしまったのですが、原因が分かりません。 どのような事が考えられるのでしょうか?
jeanbiego

2020/07/10 08:06

パスが間違っているのではないでしょうか。誤字など確認してみてください。
daic

2020/07/10 08:17

すごく初歩的な内容なのですが、Macでパスはどのように記述するのですか? file = "xxx/User/username/Stock_predict/japan-all-stock-prices/xxx.csv" 最初のxxxとはなにを表しているのでしょうか?
daic

2020/07/10 11:55 編集

file = 'download_data/japan-all-stock-prices/xxx.csv' data_ = pd.read_csv(file, encoding='sjis', na_values='-') 上記のコードでファイルの存在は確認できましたが、元のコードではやはり空のリストが生成されるだけです。 何か間違っているのでしょうか?
jeanbiego

2020/07/10 13:36

プログラミングで何か間違っているのか、いきなり全部動かして試そうとするのは上手くいきません。 PRICE_DIRはちゃんと想定(もし想定=設計がないなら、そこから考え直してください)通りのパスになっているか。file_listに中身は入っているか。実装したい機能を一つずつ確認していくのが一番の近道です。
jeanbiego

2020/07/10 13:41

そもそも上の方のコメントには下のようなディレクトリ構造になっていると書かれていますが /User/username/Stock_predict/download_data/japan-all-stock-prices 質問欄のコードにはデータディレクトリが下のように書かれています C:/sample/data/download_data download_dataは一体どこのディレクトリにあるのでしょうか。 一度、何が正しくないのか1行ずつ確認されるのがよいでしょう。残念ながら私からはあなたのパソコンの中身は見えませんので「確認してください」以上のことは大してアドバイスできません。
daic

2020/07/10 13:50

失礼しました。 質問のコードを修正しました。 download_dataはStock_predictの中にあります。
daic

2020/07/10 15:05

os.path.join()を使わずに、PRICE_DIR変数にそのままパスを書いて実行したら動きました。 そもそもこのコードは何をしているコードなのでしょうか?
jeanbiego

2020/07/11 03:59

パスとファイル名などを結合するためのものです。ググったら説明がすぐ出ますので、知らないコードがあったらまず検索してください。
daic

2020/07/11 14:19

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問