programing

DataFrame에서 문자열을 부동 소수점으로 변환

nasanasas 2020. 8. 16. 20:45
반응형

DataFrame에서 문자열을 부동 소수점으로 변환


문자열과 NaN값을 포함하는 DataFrame 열 을 부동으로 변환하는 방법. 그리고 값이 문자열과 부동 소수점 인 또 다른 열이 있습니다. 이 전체 열을 float로 변환하는 방법.


참고 : pd.convert_objects 이제 더 이상 사용되지 않습니다. pd.Series.astype(float)또는 pd.to_numeric다른 답변에 설명 된대로 사용해야 합니다.

이것은 0.11에서 사용할 수 있습니다. 강제 변환 (또는 nan으로 설정) 이것은 astype실패 할 때도 작동합니다. 또한 시리즈별로 시리즈이므로 완전한 문자열 열을 변환하지 않습니다.

In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo'])))

In [11]: df
Out[11]: 
     A    B
0  1.0  1.0
1    1  foo

In [12]: df.dtypes
Out[12]: 
A    object
B    object
dtype: object

In [13]: df.convert_objects(convert_numeric=True)
Out[13]: 
   A   B
0  1   1
1  1 NaN

In [14]: df.convert_objects(convert_numeric=True).dtypes
Out[14]: 
A    float64
B    float64
dtype: object

시도해 볼 수 있습니다 df.column_name = df.column_name.astype(float). 에 관해서 NaN값, 당신은 그들이 변환 할 방법을 지정해야하지만 당신은 사용할 수 있습니다 .fillna그것을 할 방법을.

예:

In [12]: df
Out[12]: 
     a    b
0  0.1  0.2
1  NaN  0.3
2  0.4  0.5

In [13]: df.a.values
Out[13]: array(['0.1', nan, '0.4'], dtype=object)

In [14]: df.a = df.a.astype(float).fillna(0.0)

In [15]: df
Out[15]: 
     a    b
0  0.1  0.2
1  0.0  0.3
2  0.4  0.5

In [16]: df.a.values
Out[16]: array([ 0.1,  0. ,  0.4])

In a newer version of pandas (0.17 and up), you can use to_numeric function. It allows you to convert the whole dataframe or just individual columns. It also gives you an ability to select how to treat stuff that can't be converted to numeric values:

import pandas as pd
s = pd.Series(['1.0', '2', -3])
pd.to_numeric(s)
s = pd.Series(['apple', '1.0', '2', -3])
pd.to_numeric(s, errors='ignore')
pd.to_numeric(s, errors='coerce')

df['MyColumnName'] = df['MyColumnName'].astype('float64') 

you have to replace empty strings ('') with np.nan before converting to float. ie:

df['a']=df.a.replace('',np.nan).astype(float)

Here is an example

                            GHI             Temp  Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:01:00 -7.99999952505459e-7    18.2    0   NaN
2016-03-15 06:02:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:03:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:04:00 -7.99999952505459e-7    18.3    0   NaN

but if this is all string values...as was in my case... Convert the desired columns to floats:

df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)

Your dataframe will now have float values :-)

참고URL : https://stackoverflow.com/questions/16729483/converting-strings-to-floats-in-a-dataframe

반응형