2017-10-07 2 views
1

저는 8 열의 데이터 프레임을 가지고 있으며, 마지막 6 열을 정수로 변환하고 싶습니다. 데이터 프레임에도 NaN 값이 포함되어 있으므로이를 제거하지 않습니다.파이썬은 특정 데이터 프레임 열을 정수로 변환합니다.

enter image description here

 a  b c  d  e  f  g h 
0 john  1 NaN 2.0 2.0 42.0 3.0 NaN 
1 david 2 28.0 52.0 15.0 NaN 2.0 NaN 
2 kevin 3 1.0 NaN 1.0 10.0 1.0 5.0 

어떤 아이디어?

감사합니다.

+0

컬럼에 이미 존재하는 부동 값이 간격 내에서 제한 할 수 있는지 알 수 있습니까? [0,100]라고 말하면 되나요? –

+0

예 간단하고 곧 답변을 얻을 수 있습니다 : –

답변

2

감사 :

이유 : 유모 값은 부동 소수점 값이며, 정수와 공존 할 수 없습니다. 그래서 유모 값과 수레 또는 옵션 중 하나는 유모로의 -1 생각하는

http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html

import pandas as pd 
import numpy as np 

df = pd.DataFrame.from_dict({'a': {0: 'john', 1: 'david', 2: 'kevin'}, 
'b': {0: 1, 1: 2, 2: 3}, 
'c': {0: np.nan, 1: 28.0, 2: 1.0}, 
'd': {0: 2.0, 1: 52.0, 2: np.nan}, 
'e': {0: 2.0, 1: 15.0, 2: 1.0}, 
'f': {0: 42.0, 1: np.nan, 2: 10.0}, 
'g': {0: 3.0, 1: 2.0, 2: 1.0}, 
'h': {0: np.nan, 1: np.nan, 2: 5.0}}) 

df.iloc[:, -6:] = df.iloc[:, -6:].fillna(-1) 
df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, downcast='integer') 

df 

    a b c d e f g h 
0 john 1 -1 2 2 42 3 -1 
1 david 2 28 52 15 -1 2 -1 
2 kevin 3 1 -1 1 10 1 5 
+0

고마워요! 그것은 일하고있어 :) – Sheron

2

감사 @AntonvBR for the downcast='integer' hint : 나는 유모 = -1이 옵션을 추가 해요 MaxU에

In [29]: df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, errors='coerce', downcast='integer') 

In [30]: df 
Out[30]: 
     a b  c  d e  f g h 
0 john 1 NaN 2.0 2 42.0 3 NaN 
1 david 2 28.0 52.0 15 NaN 2 NaN 
2 kevin 3 1.0 NaN 1 10.0 1 5.0 

In [31]: df.dtypes 
Out[31]: 
a  object 
b  int64 
c float64 
d float64 
e  int8 
f float64 
g  int8 
h float64 
dtype: object 
+1

안녕하세요! 여러분 중 일부가 무언가를 입력하기 전에 해결책을 생각해 보는 것도 불가능합니다. 하지만 그는 ** 정수를 원합니다. ** 다운 캐스트 = '정수'? –

+0

네, integer.this가 float로 변환해야합니다 :) @AntonvBR – Sheron

+0

@Giada, 정수 열은 NaN을 가질 수 없으므로 NaN을 정수 값으로 대체하거나 수레와 함께 살 필요가 있습니다. – MaxU

관련 문제