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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

Q&A

解決済

2回答

23785閲覧

pandasのDataFrameの値の型をfloatに変換したい

sshhoo

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

0グッド

0クリップ

投稿2018/03/29 08:42

外部からpandas.read_csvで読み込んだ数値のみのデータを、floatに変換したいです。

DataFrame全体の値をfloatに変換しても良いですし、

df.loc[[index],[columns]]で指定した値のみを、型変換する方法でも構いません。

何か有効な方法があれば教えて頂きたいです。

df.astype(float)

と入力しても、

print(type(df))

で確認すると、

<class 'pandas.core.frame.DataFrame'>

と表示されます。

よろしくお願いします。

また質問に対して不十分な事柄がございましたら、お知せ下さい。

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

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

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

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

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

wakame

2018/03/29 08:50

数値であるデータは一列目、二列目、それ以降は別の型のように特定の列のみ数値だったりするのでしょうか。
sshhoo

2018/03/29 09:29

全てのデータが数値です。
guest

回答2

0

ベストアンサー

df = df.astype(float)のように、更新結果をdfに代入してください。
指定列のみも同様に可能です。
確認はprint(type(df))ではなくprint(df.info())が適切です。

Python

1from io import StringIO 2import pandas as pd 3 4f = StringIO(""" 5i,f 61,1.1 72,2.2 83,3.3 9""" 10) 11df = pd.read_csv( f) 12print(df.info()) 13print(df) 14 15# 全部floatに 16df = df.astype(float) 17print(df.info()) 18print(df) 19 20# 'i'列のみintに 21df['i'] = df['i'].astype(int) 22print(df.info()) 23print(df)

投稿2018/03/29 08:49

編集2018/03/29 08:54
can110

総合スコア38262

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

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

sshhoo

2018/03/29 09:26

ご回答ありがとうございます。 更新結果を代入すると、無事に変換することが出来たようです。 ※DataFrameのインスタンス名はdf_tempです。 #入力コード print(df_temp.info()) df_temp=df_temp.astype(float) print(df_temp.info()) print(type(df_temp.loc[[0],['MPa']])) print(type(9.)) #出力結果 <class 'pandas.core.frame.DataFrame'> RangeIndex: 49 entries, 0 to 48 Data columns (total 12 columns): Temp 49 non-null object MPa 49 non-null object v* 49 non-null object v** 49 non-null object u* 49 non-null object u** 49 non-null object h* 49 non-null object rh 49 non-null object h** 49 non-null object s* 49 non-null object rs 49 non-null object s** 49 non-null object dtypes: object(12) memory usage: 4.7+ KB None <class 'pandas.core.frame.DataFrame'> RangeIndex: 49 entries, 0 to 48 Data columns (total 12 columns): Temp 49 non-null float64 MPa 49 non-null float64 v* 49 non-null float64 v** 49 non-null float64 u* 49 non-null float64 u** 49 non-null float64 h* 49 non-null float64 rh 49 non-null float64 h** 49 non-null float64 s* 49 non-null float64 rs 49 non-null float64 s** 49 non-null float64 dtypes: float64(12) memory usage: 4.7 KB None <class 'pandas.core.frame.DataFrame'> <class 'float'> しかし、 print(type(df_temp.loc[[0],['MPa']])) の、出力結果がfloatではなく <class 'pandas.core.frame.DataFrame'> に、なっているのはなぜでしょうか? df_temp全体をfloatになっているはずなのに、 .loc を、使って値を取り出すと、自然と型が変更されてしますのでしょうか? 何か不足している情報がありましたら、お知らせください。
can110

2018/03/29 09:35

.loc[~]が返す結果は単一値(float)ではなくDataFrameです。 詳細はhttps://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-labelや .locの実例が載っている解説ページを参照ください。
sshhoo

2018/03/29 10:18

ご解説ありがとうござます。
mkgrei

2018/03/29 10:38

データフレームの中身を得るには最後に.valuesをつけてください。 そうするとnumpy.ndarrayになるでしょうか。 numpy.float32の可能性もありますか。
sshhoo

2018/03/30 02:26

ndarrayはuncallableとのエラーが出ました。 結局、DataFrameの列をリストに移してから、indexで値を扱うと上手くいきました。 お力添えありがとうございました。
guest

0

まずdf.dtypesをチェックしてみてください。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dtypes.html

投稿2018/03/29 08:48

tachikoma

総合スコア3601

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

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

sshhoo

2018/03/29 10:19

参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問