如何使用Pandas.cut方法在Pandas数据框中创建新列?

如何使用Pandas.cut方法在Pandas数据框中创建新列?,pandas,Pandas,我有一个关于房价的专栏,如下所示: 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 我想创建一个名为data['PriceRanges']的新列,它将每个价格设置在给定的范围内。这就是我的代

我有一个关于房价的专栏,如下所示:

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
我想创建一个名为data['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()

我一直在尝试不同的方法,似乎被困在这里。我非常感谢你的帮助

谢谢,
Hugo

在循环中覆盖
bin
标签时出现问题,因此只有最后一个值

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

print (bins)
11950000

print (labels)
11950000
没有必要的循环,只使用
range
替代方法,为标签创建范围。最后添加参数
include_lowest=True
,以将
bin
0
)的第一个值包含到第一个组中

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

在循环中覆盖
箱子
标签
时出现问题,所以只有最后一个值

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

print (bins)
11950000

print (labels)
11950000
没有必要的循环,只使用
range
替代方法,为标签创建范围。最后添加参数
include_lowest=True
,以将
bin
0
)的第一个值包含到第一个组中

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

成功了!非常感谢你,耶斯雷尔!我仍然需要一些时间来完全理解您的“标签”代码行是如何工作的,但我有一个想法。再次感谢!成功了!非常感谢你,耶斯雷尔!我仍然需要一些时间来完全理解您的“标签”代码行是如何工作的,但我有一个想法。再次感谢!