🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Python

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

pandas

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

Q&A

解決済

1回答

1060閲覧

pythonにおける文字列を日付型へ変換する方法について

taniisei

総合スコア5

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Python

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

pandas

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

0グッド

0クリップ

投稿2020/12/31 07:01

私は、pythonの学習の一環で株価のスクレイピングを行なっております。
ライブラリpandasを用いて、データの取得まで行い、現在データをグラフ化するために文字列で取得した日付を日付型へ変換しようとしているのですが、エラーが出てしまいました。
プログラムに書いた日付のフォーマットが取得データと違うらしいのですが、参考サイトからコピペした時も同じエラーが出ており、正直何が間違っているのかわかりません。
ご教示していただけたら幸いです。

以下にpythonで書いたプログラムを示させていただきます。

python

1import pandas as pd 2url = 'https://finance.yahoo.com/quote/%5EN225/history?p=%5EN225' 3data = pd.read_html(url, header = 0) 4print(data[0].head()) 5print(data[0].tail()) 6data[0].dropna(inplace = True) 7print(data[0].tail()) 8from datetime import datetime as dt 9data[0]['Date2'] = [dt.strptime(i, '%b %d, %Y') for i in data[0]['Date']] 10print(data[0]['Date2'].head()) 11print(data[0].head())

以下にターミナルでの実行結果を示させていただきます。

Date Open High Low Close* Adj Close** Volume 0 Dec 30, 2020 27559.10 27572.57 27338.56 27444.17 27444.17 50600 1 Dec 29, 2020 26936.38 27602.52 26921.14 27568.15 27568.15 59400 2 Dec 28, 2020 26691.29 26854.03 26664.60 26854.03 26854.03 50700 3 Dec 25, 2020 26708.10 26716.61 26638.28 26656.61 26656.61 33400 4 Dec 24, 2020 26635.11 26764.53 26605.26 26668.35 26668.35 47900 Date ... Volume 96 Aug 11, 2020 ... 99300 97 Aug 07, 2020 ... 66700 98 Aug 06, 2020 ... 62600 99 Aug 05, 2020 ... 74000 100 *Close price adjusted for splits.**Adjusted cl... ... *Close price adjusted for splits.**Adjusted cl... [5 rows x 7 columns] Date ... Volume 96 Aug 11, 2020 ... 99300 97 Aug 07, 2020 ... 66700 98 Aug 06, 2020 ... 62600 99 Aug 05, 2020 ... 74000 100 *Close price adjusted for splits.**Adjusted cl... ... *Close price adjusted for splits.**Adjusted cl... [5 rows x 7 columns] Traceback (most recent call last): File "script.py", line 39, in <module> data[0]['Date2'] = [dt.strptime(i, '%b %d, %Y') for i in data[0]['Date']] File "script.py", line 39, in <listcomp> data[0]['Date2'] = [dt.strptime(i, '%b %d, %Y') for i in data[0]['Date']] File "/Users/taniimasahiro/.pyenv/versions/3.6.0/lib/python3.6/_strptime.py", line 565, in _strptime_datetime tt, fraction = _strptime(data_string, format) File "/Users/taniimasahiro/.pyenv/versions/3.6.0/lib/python3.6/_strptime.py", line 362, in _strptime (data_string, format)) **ValueError: time data '*Close price adjusted for splits.**Adjusted close price adjusted for both dividends and splits.' does not match format '%b %d, %Y'**

前提・実現したいこと

取得したデータから得た日付を文字列型から日付型へ変換したい。
ここに質問の内容を詳しく書いてください。
私は、pythonの学習の一環で株価のスクレイピングを行なっております。
データの取得まで行い、現在データをグラフ化するために文字列で取得した日付を日付型へ変換しようとしているのですが、エラーが出てしまいました。
最終手段として、参考hpのコードをコピペしたのですが、同じエラー表示が出て、フォーマットの書き方を色々変えているのですがエラーが出ております。

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

ValueError: time data '*Close price adjusted for splits.**Adjusted close price adjusted for both dividends and splits.' does not match format '%b %d, %Y'

該当のソースコード

python

1from datetime import datetime as dt 2data[0]['Date2'] = [dt.strptime(i, '%b %d, %Y') for i in data[0]['Date']] 3print(data[0]['Date2'].head()) 4print(data[0].head())

試したこと

参考サイトのコードで実行。
取得データから直接該当部分をコピペして実行。

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

Python 3.6.0
lxml4.6.2
pandas0.25.3
datetime
ここにより詳細な情報を記載してください。
参考ホームページ
https://ai-inter1.com/python-pandas_scraping/
変換したいデータを取得したホームページ
https://finance.yahoo.com/quote/%5EN225/history?p=%5EN225
(注:これは、スクレイピングの練習のために、書いているコードなので、データ自体はなんでも構いません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

dataの100行目の*Close price adjusted for splits.**Adjusted cl... ... *Close price adjusted for splits.**Adjusted cl...
の部分をdatetimeに変換しようとしたけでできない、とエラーメッセージに書いてあります。
変換する前に100行目を削除してください。

投稿2020/12/31 07:15

編集2020/12/31 07:19
ppaul

総合スコア24670

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

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

taniisei

2021/01/01 05:08

data[0] = data[0].drop([100]) を書いて、日付型へ変換できました。ありがとうございます。 私の以下のコードで、100行目を削除していたつもりだったのですが、なんで削除されていなかったのでしょうか?またどうすれば、削除できていたのでしょうか?ご教示していただけたら、幸いです。 data[0].dropna(inplace = True) print(data[0].tail())
ppaul

2021/01/01 05:22

元のデータフレームがどうなっているのかは、提示された情報では正確にはわかりませんが、少なくとも*Close price ...という文字列は含まれています。 dropnaは、その行のすべての要素がNaNである場合に行を削除するので、100行目はその条件を満たしていないため削除されません。
taniisei

2021/01/01 09:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問