如何在pandas中将字符串类型地址列按价格规则转换为整数值
Pandas Address列按价格规则转数值类型方案
你可以根据实际使用场景选择以下两种符合「价格对应规则」的转换方式:
方案1:按地址平均价格排序做顺序编码
编码值和地址的均价正相关,均价越高编码数值越大,同时保留了编码的离散性:
import pandas as pd # 示例数据集构造,你可替换为自己的数据集读取代码 df = pd.DataFrame({ 'Area': [63, 60, 79, 95, 123], 'Room': [1,1,2,2,2], 'Parking': [1,1,1,1,1], 'Address': ['Shahran', 'Chids', 'Pardis', 'Shahrake', 'Shahrake'], 'Price': [1850000000, 1850000000, 550000000, 902500000, 7000000000] }) # 计算各地址的平均价格,按均价升序生成映射字典 addr_mean_price = df.groupby('Address')['Price'].mean().sort_values() addr_encoding_map = {addr: idx for idx, addr in enumerate(addr_mean_price.index)} # 应用映射生成新的数值列 df['Address_encoded'] = df['Address'].map(addr_encoding_map)
转换后对应规则示例:
| Address | 平均价格 | 编码值 |
|---|---|---|
| Pardis | 5.5e8 | 0 |
| Shahrake | 3.95e9 | 1 |
| Chids | 1.85e9 | 2 |
| Shahran | 1.85e9 | 2 |
方案2:直接用地址平均价格作为编码值
完全贴合价格对应规则,适合后续做房价预测等回归任务:
# 生成地址-均价映射字典 addr_price_map = df.groupby('Address')['Price'].mean().to_dict() # 应用映射 df['Address_price_encoded'] = df['Address'].map(addr_price_map)
注意:如果是建模场景,为了避免数据泄露,需要用训练集的地址均价统计值去映射测试集,不要直接使用全量数据集的统计结果。
补充:无价格关联的通用标签编码
如果不需要和价格挂钩,只是简单把字符串转离散数值,可以直接用LabelEncoder:
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() df['Address_label'] = le.fit_transform(df['Address'])
内容的提问来源于stack exchange,提问作者Hossein Alipour
相关产品推荐
相关产品推荐

