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

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

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

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

Python

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

pandas

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

Q&A

解決済

2回答

553閲覧

pandas csv 文字列変換

nonoakit

総合スコア1

CSV

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

Python

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

pandas

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

0グッド

0クリップ

投稿2022/05/12 06:56

編集2022/05/12 07:42

investing.comにてダウンロードした日経平均株価の過去データ(csv形式)を
↓下記サイトを参考に文字列からdatetime型や数値などに変換したいです。
https://myfrankblog.com/how_to_get_stock_price_with_python/#i-5

しかし、エラーが出てしまい色々と調べてみましたがうまくいきません。
解決方法をご教授いただければと思います。

python初心者であり、頓珍漢な質問かと思いますが何卒よろしくお願い申し上げます。

環境
・Python 3.7.3
・pandas 1.3.5
・jupyter notebook

変換したいデータ
イメージ説明

import pandas as pd import datetime df = pd.read_csv("7203 過去データ.csv") # 日付けをdatetimeに変換 df["日付け"] = df["日付け"].apply(lambda x: datetime.datetime.strptime(x, "%Y年%m月%d日")) def number_converter(x): # 不要文字を除去 for s in [",", "M", "%"]: x = x.replace(s, "") return float(x) # 数値データを floatに変換 for col in ["終値", "始値", "高値", "安値", "出来高", "前日比%"]: df[col] = df[col].apply(number_converter)

エラー内容
ValueError: could not convert string to float: '-'
↑文字列を浮動小数点数に変更できませんでしたとエラーがでます。

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

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

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

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

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

irognodyci

2022/05/12 07:26

・csvがどんなデータになっているか(列名行名含めて数行あれば〇) ・エラーの内容 このあたりがあると伝わりやすいと思います。
guest

回答2

0

ベストアンサー

- だけのデータなど、数値に変換できないものは np.NaN に置換されます

python

1import pandas as pd 2 3pd.set_option('display.unicode.east_asian_width', True) 4 5df = pd.read_csv("7203 過去データ.csv") 6df["日付け"] = pd.to_datetime(df['日付け'], format="%Y年%m月%d日") 7df.iloc[:,1:] = ( 8 df.iloc[:,1:].replace([",", "M", "%"], "", regex=True) 9 .apply(pd.to_numeric, errors="coerce")) 10 11print(df.to_markdown(index=False))
日付け終値始値高値安値出来高変化率%
2022-05-12 00:00:00205020512113.52012.544.1-1.54
2022-05-11 00:00:0020822205.522102050.564.82-4.43
2022-05-10 00:00:002178.521902204215528.05-2.96
2022-05-09 00:00:00224522692282.52244.522.37-1.36
2022-05-06 00:00:002276225422762242.530.142.15
2022-05-02 00:00:00222822672277.52217.526.63-0.34
2022-04-28 00:00:002235.52160.52242.52152.533.413.23
2022-04-27 00:00:002165.521462174.5214434.3-0.67
2022-04-26 00:00:0021802183.521982164nan-0.46
2022-04-25 00:00:0021902149.52199.5214522.52-0.9
2022-04-22 00:00:00221022202227.5220018.87-1.78
2022-04-21 00:00:00225022382261.52236.521.54-0.38
2022-04-20 00:00:002258.522202269221942.433.74
2022-04-19 00:00:00217721752186.5215921.171.02
2022-04-18 00:00:0021552145.521652127.515.32-0.23
2022-04-15 00:00:00216021002163210019.521.34
2022-04-14 00:00:002131.520962131.52085.518.470.57
2022-04-13 00:00:002119.52108.52123.5207326.022.42
2022-04-12 00:00:002069.521052112.52065.526.54-1.52

投稿2022/05/12 09:28

編集2022/05/12 09:31
melian

総合スコア19803

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

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

nonoakit

2022/05/16 00:26

ご回答いただきまして誠にありがとうございました。
guest

0

python

1import pandas as pd 2import datetime 3 4df = pd.read_csv("7203 過去データ.csv") 5 6# 日付けをdatetimeに変換 7df["日付け"] = df["日付け"].apply(lambda x: datetime.datetime.strptime(x, "%Y年%m月%d日")) 8 9# def number_converter(x): 10# # 不要文字を除去 11# for s in [",", "M", "%"]: 12# x = x.replace(s, "") 13 14# return float(x) 15 16# 数値データを floatに変換 17df = df.replace([",", "M", "%"],"", regex=True) 18for col in ["終値", "始値", "高値", "安値", "出来高", "変化率%"]: 19 df[col] = pd.to_numeric(df[col], errors='ignore') 20print(df)

こんな感じでどうでしょうか。
df.replace([",", "M", "%"],"", regex=True)で",", "M", "%"を消して、
df[col] = pd.to_numeric(df[col], errors='ignore')でfloatに変換しています。
(前日比が変化率になっていたのでそこも修正してあります。)

投稿2022/05/12 08:18

irognodyci

総合スコア227

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

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

nonoakit

2022/05/16 00:28

ご回答いただきまして誠にありがとうございます。 実行してみたところ、’変化率%’がerrorkeyとして出てしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問