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