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

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

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

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

Q&A

解決済

1回答

354閲覧

pythonで取得したデータを個別毎にCSVに落とすのはではなく、同じCSVで全部のデータをだしたい

takachan

総合スコア5

Python

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

0グッド

0クリップ

投稿2022/05/03 01:32

pythonで株価データを取得しました。それをCSVに落とすときに取得したグループごとにCSVされてしまいます。それを、同じCSVで全部のデータをだそうとこところみたのですが、がぞうのようにでてしまいます。

どうしたら全部のデータを1つのCSVでおとせますか?

イメージ説明

python

1コード 2!pip install yfinance fredapi 3 4import sys 5import datetime as dt 6from pandas.tseries.offsets import BDay 7 8import numpy as np 9import pandas as pd 10 11import yfinance as yf 12from fredapi import Fred 13 14import matplotlib.pyplot as plt 15import seaborn as sns; sns.set() 16 17def get_stock_price(symbol_list, date_range): 18 19 df_all = pd.DataFrame() 20 21 for symbol in symbol_list: 22 print('取得中: ' + symbol) 23 df = yf.download( 24 tickers=symbol, 25 start=dt.datetime.strftime(date_range[0], '%Y-%m-%d'), 26 end=dt.datetime.strftime(date_range[1], '%Y-%m-%d')) 27 df.index = pd.to_datetime(df.index) 28 df_all = pd.concat( 29 [df_all, df.rename( 30 columns={'Adj Close': symbol}).loc[:, symbol]], 31 axis='columns', sort=False) 32 33 return df_all 34 35date_range = (dt.date(2016, 12, 30), dt.date(2022, 3, 28)) 36 37symbol_list_JP = ['8103.T', '1852.T', '2972.T', '4246.T', '5208.T'] 38symbol_list_US = ['AAPL', 'BA', 'DIS', 'GS', 'KO', 'XOM'] 39 40BM_list_JP = ['1306.T', '^N225'] 41BM_list_US = ['QQQ', 'SPY'] 42 43stock_price_JP = get_stock_price(symbol_list_JP, date_range).fillna(method='ffill').dropna() 44stock_price_US = get_stock_price(symbol_list_US, date_range).fillna(method='ffill').dropna() 45 46BM_price_JP = get_stock_price(BM_list_JP, date_range).fillna(method='ffill').dropna() 47BM_price_US = get_stock_price(BM_list_US, date_range).fillna(method='ffill').dropna() 48 49# stock_priceとBM_priceの日付の共通部分をとる 50date_range_JP = sorted(list(set(stock_price_JP.index) & set(BM_price_JP.index))) 51date_range_US = sorted(list(set(stock_price_US.index) & set(BM_price_US.index))) 52stock_price_JP = stock_price_JP.reindex(date_range_JP) 53stock_price_US = stock_price_US.reindex(date_range_US) 54BM_price_JP = BM_price_JP.reindex(date_range_JP) 55BM_price_US = BM_price_US.reindex(date_range_US) 56 57#各データをCSVに落とす 58stock_price_JP.to_csv('stock_price_JP.csv') 59stock_price_US.to_csv('stock_price_US.csv') 60 61BM_price_JP.to_csv('BM_price_JP.csv') 62BM_price_US.to_csv('BM_price_US.csv') 63

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

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

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

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

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

melian

2022/05/03 02:09

pandas.concat でデータフレームを結合してみてはどうでしょうか(all という名前は Python の組み込み関数名なので all_stock に変更しています)。 all_stock = pd.concat([stock_price_JP, stock_price_US]) all_stock.to_csv('all2.csv') ただ、この場合はインデックス(日付)で結合することになります。
takachan

2022/05/03 02:30

ご返信、ありがとうございます。下記で落としたところ、1つのCSVに落とせましたが、 all_stock = pd.concat([stock_price_JP, stock_price_US]) all_stock.to_csv('all2.csv') 「stock_price_JP」のほうは値も落ちましたが、「stock_price_US」の方は値が空白でおちてきました。 なお、下記でCSVに落とした時は、値も落ちてきます stock_price_US.to_csv('stock_price_US.csv')
melian

2022/05/03 02:34

stock_price_US の値はCSVファイルの後半にあります。これは、stock_price_US と stock_price_JP では日付がずれているためです。
takachan

2022/05/03 02:44

確かにありました。 データ取得期間は下記のようにしているのですが、日付がずれてしまうのでしょうか。 date_range = (dt.date(2016, 12, 30), dt.date(2022, 3, 28))
melian

2022/05/03 03:04 編集

ごめんなさい、指定の仕方を間違えていました。pd.concat に axis=1 を追加して試してみて下さい。 all_stock = pd.concat([stock_price_JP, stock_price_US], axis=1) all_stock.to_csv('all2.csv')
takachan

2022/05/03 03:01

なるほどですね。 各データごとに、取得期間がずれてでてきてしまうのですね。 一括でCSVに落とすときに、日付のずれがでてこないで、落とす方法はありますか? 例えば、stock_price_JPは2019-03-12まで、空白で2019-3-12以降はすべてのデータが日付でそろって落ちてくるような方法です。
melian

2022/05/03 03:06

入れ違いになってしまいましたが、書き直した一つ前のコメントをご参照下さい。
takachan

2022/05/03 03:11

ありがとうございます。 左一列に日付がでてきて、右側に日付に該当した各銘柄の株価がでてきました。
takachan

2022/05/03 03:13

ベストアンサーにしたいので、よろしければ、回答に一言でいいので、記載していただくことは可能ですか?
melian

2022/05/03 03:14

はい、後ほど回答します。
guest

回答1

0

ベストアンサー

pandas.concat でデータフレームを結合して CSV ファイルに出力します。

python

1all_stock = pd.concat([stock_price_JP, stock_price_US], axis=1) 2all_stock.to_csv('all2.csv')

投稿2022/05/03 03:18

melian

総合スコア19703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問