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

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

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

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

pandas

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

Q&A

解決済

4回答

693閲覧

csvデータの1.2B や567Mの処理方法について

kuma07

総合スコア9

CSV

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

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

pandas

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

0グッド

0クリップ

投稿2020/07/18 06:48

numpy、pandasを利用して株価分析を試みてる初心者です。

ネット(investment.com)から出来高をcsvでダウンロードして読み込みを考えております。
この出来高のデータは、1.2B,592Mのような2種類の単位が使われております(M=1,000,000, B=100,000,000になります)

単位が一つであればreplace関数でMなどを除外するのですかが単位が2つありそれぞれの意味が異なってます。

volume=volume.apply(lamba x:x.replace('B','').replace('M','').astype(np.float)

ですとB,Mも単に無視されるだけですし

replace('B','/0.01')のコードではcsvデータを文字として認識してるから?かエラーがでます(ValueError:could not
convert string to fmoat)

このような場合の処理方法についてご教示いただけますでしょうか
よろしくお願いします

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

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

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

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

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

guest

回答4

0

ベストアンサー

以下のように変換処理をかませるとよいでしょう。

Python

1import pandas as pd 2 3def f(s): 4 if s[-1] == 'M': 5 return float(s[:-1]) * 10**6 6 elif s[-1] == 'B': 7 return float(s[:-1]) * 10**9 8 return float(s) 9 10l = pd.Series(['123', '4.56M', '7.89B']) 11l = l.apply(f) 12print(l) 13#0 1.230000e+02 14#1 4.560000e+06 15#2 7.890000e+09

投稿2020/07/18 07:01

編集2020/07/18 11:26
can110

総合スコア38341

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

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

bsdfan

2020/07/18 11:08

float(s[-2]) だと、BとMの直前1文字しか見ていません。 float(s[:-1]) じゃないでしょうか。
can110

2020/07/18 11:26

ご指摘ありがとうございます。そのとおりです。 回答修正しました。
kuma07

2020/07/18 22:43

ご丁寧なご回答ありがとうございます。最終の文字を指定して変換させる処理をすれば良いこと理解できました。 勉強不足であり[-1]で最終文字を指定するなどが直ぐに思いつきませんでした 大変ありがとうございました
guest

0

単純に、文字列の終端の文字を見ればどうでしょう
そこから処理を変えていけばいいのでは

投稿2020/07/18 06:51

y_waiwai

総合スコア88042

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

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

kuma07

2020/07/18 22:45

ありがとうございます。終端の文字を[[-1]で指定して処理すれば良いこと理解できました。大変ありがとうございます。
guest

0

日常でも、1万円、10億人、1兆ドル、などと使ってますよね?
csvファイルの内容が、"1万円,3億円,1.2兆円"だったとしたら、考えやすいかもしれません。

y_waiwaiさんの回答にあるように、末尾のM,B,Tが倍数(M がMillionで1,000,000 (百万)、BがBillionで1,000,000,000(十億)、TがTrillionで1,000,000,000,000(一兆))なのですから、

文字列の"1.2B"は、"1.2"と"B"に分けて、"1.2"は数値の1.2に、"B"は1,000,000,000に、それぞれ変換して、1.2 * 1,000,000,000 と計算する。

文字列の"592M"は、"592"と"M"に分けて、592 * 1,000,000 と計算する。

という操作で良くありませんか。

どこが判らないのか説明してもらうと、より適切な回答が出来ると思います。

投稿2020/07/18 07:21

coco_bauer

総合スコア6915

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

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

0

単位をいずれかに合わせれば良いかと思います。

投稿2020/07/18 07:12

meg_

総合スコア10760

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問