2016-06-09 45 views
0

`進口大熊貓 進口numpy的浮在Python值如何分類使用熊貓庫

#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)) 
============================================================================` 

我要歸類的urbanrate所有的值(這是所有浮點數像24.5688.9877.65)成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這是完全不同的

如果沒有下面這會工作:

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) 

它不是操作逐行這裏有必要,可以將整個列/系列作爲ARG傳遞給你的函數

+0

'SUB1 [「城市」] = SUB1 [「城市」]申請(城市)'現在,它表示該行KeyError異常錯誤:urban.I我不能想辦法。 – user3400176

+0

嗯試試'sub1 ['urban'] = sub1 ['urbanrate']。apply(urban)' – 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