2016-06-09 9 views
0

`수입 팬더 수입 NumPy와를 사용하여 파이썬에서 값을 부동 분류하는 방법팬더 라이브러리

#importing the dataset 
data=pandas.read_csv('gapminder.csv',low_memory=False) 

#setting variables to be worked with to numeric 
data['urbanrate']=data['urbanrate'].convert_objects(convert_numeric=True) 
data['femaleemployrate']=data['femaleemployrate'].convert_objects(convert_numeric=True) 
data['lifeexpectancy']=data['lifeexpectancy'].convert_objects(convert_numeric=True) 

print("Count for urbanrate") 
chk8=data['urbanrate'].value_counts(sort=False,dropna=False) 
print(chk8) 

sub1=data[['urbanrate','femaleemployrate','lifeexpectancy']] 
print (sub1.head(25)) 

=========================================================================== 
def urban (row): 
     if (row['urbanrate']<25.0): 
      return 1 
     if (data[['urbanrate']>=25.0 & data['urbanrate']<75.0]): 
     return 2 
     if (data['urbanrate']>75.0): 
     return 3 
sub1['urban']=sub1.apply(lambda row: urban (row),axis=1) 
print (sub1.head(25)) 
============================================================================` 

내가 (77.65 모든 24.56, 88.98 같은 부동 소수점 수있다) urbanrate의 모든 값을 분류 할에 3 개의 다른 카테고리 (하나는 <25, 다른 하나는 >=25 and <75, 다른 하나는 >=75)는 값을 새로운 변수 (도시라고 말함)에 저장합니다. 어떻게해야합니까? 나는 내 코드를 주었다.

TypeError: ('cannot compare a dtyped [float64] array with a scalar of type [bool]', 'occurred at index 1'))

나에게

답변

0

사용을 도와주세요 3 개 마스크 : 나는 그것을하고는 나에게주는 오류가 실행이 부울 조건을 충족 행을 마스크 수

sub1.loc[sub1['urbanrate']<25.0,'urban'] = 1 
sub1.loc[(sub1['urbanrate']>=25.0) & (sub1['urbanrate']<75.0),'urban'] = 2 
sub1.loc[sub1['urbanrate']>75.0,'urban'] = 3 

그들 모두를 설정 벡터화 된 방식으로 시도한 결과가 실패했습니다.

if (data[['urbanrate']>=25.0 & data['urbanrate']<75.0]): 
    return 2 

여기서 배열 wi 스칼라 부울을 생산하는 스칼라 값을 토륨,이 올바른 연산자를 사용하는 추가하지만, 작동하지 않습니다 괄호 ()의 조건을 둘러싸 필요 :

if (data[['urbanrate']>=25.0) & (data['urbanrate']<75.0]): 
    return 2 

는 또한 함수가 일치하지 않습니다, 당신은 apply에게 전화 axis=1 전달이 당신이 행 값에서 작동하도록 노력하고 귀하의 첫 번째 조건이 괜찮 의미 :

if (row['urbanrate']<25.0): 
      return 1 

하지만 다음 조건에서 당신은 완전히 다른 것입니다 전체 Series 테스트하고

,691,363 (210) 다음은 일한 것 않은 경우

:

def urban (colData): 
    if colData<25.0: 
     return 1 
    if (colData>=25.0) & (colData<75.0]): 
     return 2 
    if (colData>75.0): 
     return 3 
sub1['urban']=sub1['urbanrate'].apply(urban) 

그것을 행 방향으로 여기에 작동 할 필요가 없었다, 당신은 당신의 함수에 인수로 전체 열/시리즈를 전달할 수 있습니다

+0

'SUB1 [ '도시'] = SUB1 [ '도시'를 (도시) 적용'지금은 KeyError를 등이 줄 오류를 보여주는 : urban.I가 가능하지 않다 그것을 알아 내라. – user3400176

+0

Hmm try'sub1 [ 'urban'] = sub1 [ 'urbanrate']. 적용 (도시)' – EdChum

1

나는 당신이 pd.cut 사용할 수 있습니다 생각한다.

import pandas as pd 

df = pd.DataFrame({'urbanrate':[10,20,25,30,40,75,80,100]}) 
print (df) 
    urbanrate 
0   10 
1   20 
2   25 
3   30 
4   40 
5   75 
6   80 
7  100 

bins = [0, 24.999, 74.999, 1000] 
group_names = [1,2,3] 
df['urban'] = pd.cut(df['urbanrate'], bins, labels=group_names) 
print (df) 
    urbanrate urban 
0   10  1 
1   20  1 
2   25  2 
3   30  2 
4   40  2 
5   75  3 
6   80  3 
7  100  3