2014-09-05 2 views
3

팬더 시리즈 값을 특정 유형으로 변환하고 변환 할 수없는 해당 요소를 설정할 수 있습니까?팬더가 형식을 변환하고 유효하지 않은 값을 na로 설정합니다

나는

더 정확하게, 나는 형에게 열을 지정하려면

업데이트 ...와 Series.astype(dtype, copy=True, raise_on_error=True)을 발견하고 예외를 피하기 위해 raise_on_error=True을 설정하지만이 유효하지 않은 항목 없음으로 설정하지 않습니다 로 변환해야합니다. [123, 'abc', '2010-01-01', 1.3] 값을 포함하고 float으로 형식 변환을 포함하는 계열의 경우 [123.0, nan, nan, 1.3]이 결과로 나타납니다. datetime이 선택되면 series[2]에만 유효한 datetime 값이 포함됩니다. convert_objects은 IMHO와 같은 유연성을 허용하지 않습니다.

답변

4

난 당신이 convert_objects와 함께 더 나은 행운을 가질 수있다 생각한다

In [11]: s = pd.Series(['1', '2', 'a']) 

In [12]: s.astype(int, raise_on_error=False) # just returns s 
Out[12]: 
0 1 
1 2 
2 a 
dtype: object 

In [13]: s.convert_objects(convert_numeric=True) 
Out[13]: 
0  1 
1  2 
2 NaN 
dtype: float64 

업데이트 : convert_objects 방법은 사용되지 않습니다 최근 팬더에 있습니다. pd.to_numeric에 찬성
는 :

In [21]: pd.to_numeric(s, errors='coerce') 
Out[21]: 
0 1.0 
1 2.0 
2 NaN 
dtype: float64 

이 (또한 DataFrames에 근무하는) convert_objects 같은 마법/매우 강력한 것이 아니라 잘 작동이 경우 더 명시 적입니다.
다른 to_* 기능이 언급 된 object conversion section of the docs을 읽으십시오.

+0

날짜 값에도 사용할 수 있습니까? – orange

+0

방금 ​​함수 서명을 보았습니다 :'convert_objects (self, convert_dates = True, convert_numeric = False, convert_timedeltas = True, copy = True)'. 특정 유형으로 변환하도록 강제 할 수는 없습니다. 그렇지 않습니까? – orange

+0

수레, 날짜, 델타 ... 거의 항상 당신은 이것들을 원합니다 (참고 : int는 NaN을 가질 수 없습니다). –

-1
s.astype(int, raise_on_error=False) 
s = s.apply(lambda x: x if type(x)==int else np.nan) 
s = s.dropna() 
+0

이것은 여러 가지 문제를 해결하지 못합니다. 값이 숫자가 아니면 astype에서 오류가 발생합니다. 따라서 첫 번째 줄에 문제가 있으면 두 번째 줄과 세 번째 줄이 실행되지 않습니다. 첫 번째 줄에 문제가 없다면 두 번째 줄과 세 번째 줄은 무의미합니다. –

관련 문제