2017-11-30 13 views
1

私はこのようになり、住宅価格との欄があります。pandas.cutメソッドを使用して、Pandas DataFrameに新しい列を作成する方法は?

0   0.0 
1 1480000.0 
2 1035000.0 
3   0.0 
4 1465000.0 
5  850000.0 
6 1600000.0 
7   0.0 
8   0.0 
9   0.0 
Name: Price, dtype: float64 

を、私は与えられた範囲内の各価格を設定データ[「PriceRanges」]と呼ばれる新しい列を作成します。これは私のコードは次のようになります。

data = pd.read_csv("Melbourne_housing_FULL.csv") 
data.fillna(0, inplace=True) 

for i in range(0, 12000000, 50000): 
    bins = np.array(i) 
    labels = np.array(str(i)) 


data['PriceRange'] = pd.cut(data.Price, bins=bins, labels=labels, right=True) 

そして私は、このエラーメッセージが表示されます。 はTypeError:LEN()無サイズオブジェクトの

は、私は別のアプローチをしようとし、ここで立ち往生しているように見えるしてきました。私は本当にいくつかの助けに感謝します。

おかげで、あなたは、ループ内のbinslabelsを上書きする問題があり、その最後の値だけがある ヒューゴ

答えて

0

for i in range(0, 12000000, 50000): 
    bins = np.array(i) 
    labels = np.array(str(i)) 

print (bins) 
11950000 

print (labels) 
11950000 

一切必要ループ、唯一の代わりにrange使用numpy代替arangeとラベルが範囲を作成するためにはありません。最後に、bins0)の最初の値を最初のグループに含めるために、パラメータinclude_lowest=Truecutを最後に追加します。

bins = np.arange(0, 12000000, 50000) 
labels = ['{} - {}'.format(i + 1, j) for i, j in zip(bins[:-1], bins[1:])] 
#correct first value 
labels[0] = '0 - 50000' 
print (labels[:10]) 
['0 - 50000', '50001 - 100000', '100001 - 150000', '150001 - 200000', 
'200001 - 250000', '250001 - 300000', '300001 - 350000', '350001 - 400000', 
'400001 - 450000', '450001 - 500000'] 

data['PriceRange'] = pd.cut(data.Price, 
          bins=bins, 
          labels=labels, 
          right=True, 
          include_lowest=True) 
print (data) 
     Price   PriceRange 
0  0.0   0 - 50000 
1 1480000.0 1450001 - 1500000 
2 1035000.0 1000001 - 1050000 
3  0.0   0 - 50000 
4 1465000.0 1450001 - 1500000 
5 850000.0 800001 - 850000 
6 1600000.0 1550001 - 1600000 
7  0.0   0 - 50000 
8  0.0   0 - 50000 
9  0.0   0 - 50000 
+0

これは機能しました。 Jezraelさん、ありがとうございました!私はあなたの "ラベル"コード行がどのように機能するかを完全に理解するのにまだ時間が必要ですが、私は考えています。再度、感謝します! –

関連する問題