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


113

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


7
사용하지 마십시오 convert_objects. 더 이상 사용되지 않습니다. 사용 to_numeric또는 astype대신에
테드 페트로 우

답변:


72

참고 : 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

이것은 열 (리드 멀티 인덱스에서)에 대해 작동하지 않으며 데이터 프레임의 값에 대해서만 작동합니다
denfromufa 2015

1
문자열을 float로 변환하기 위해 set_levels를 사용해야했습니다
denfromufa

16
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)단일 열만 변환 할 수 있습니다.
Jack

19
이 이제 새로운 버전의 pd.to_numeric (골)입니다
제프

11
convert_objects는 최신 판다에서 더 이상 사용되지 않습니다. 데이터 유형별 변환기 pd.to_numeric을 사용하십시오.
토마스 매튜

58

시도해 볼 수 있습니다 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])

47

최신 버전의 pandas (0.17 이상)에서는 to_numeric 함수를 사용할 수 있습니다 . 전체 데이터 프레임 또는 개별 열만 변환 할 수 있습니다. 또한 숫자 값으로 변환 할 수없는 항목을 처리하는 방법을 선택할 수있는 기능도 제공합니다.

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')

32
적용하려면 pd.to_numericA를 DataFrame, 하나는 사용할 수 있습니다 df.apply(pd.to_numeric)이 답변에 자세히 설명 .
Ninjakannon

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

6
이것은 String에서 Float로 변환 할 때 작동하지 않습니다.ValueError: could not convert string to float: 'date'
Jack

@Jack 여기서 해결 방법을 알고 있습니까? 문자열을 부동 소수점으로 변환하는 정확한 문제가 발생했습니다.
Hatt

@Hatt 나는 같은 문제에 직면하고 있습니다. 그것에 대한 해결책을 찾았습니까?
Prakhar Jhudele

@Jack 잘 모르겠지만 날짜 형식과 부동 소수점을 섞은 것 같습니다. # datetime으로 변환 df [ 'date'] = pd.to_datetime (df [ 'date'])
Claude COULOMBE

8

float로 변환하기 전에 빈 문자열 ( '')을 np.nan으로 바꿔야합니다. 즉 :

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

1

다음은 예입니다.

                            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

그러나 이것이 모든 문자열 값이라면 ... 내 경우와 같이 ... 원하는 열을 부동 소수점으로 변환하십시오.

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)

이제 데이터 프레임에 부동 값이 있습니다. :-)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.