含千分位逗号的DataFrame价格列拆分问题求助
解决方案:正确拆分含千分位逗号的价格列
问题出在你直接用逗号作为拆分符——价格本身的千分位逗号会被误判成分隔符,导致拆分混乱。要解决这个问题,得精准匹配两个价格之间的分隔逗号(也就是紧跟$的逗号),用正则表达式来拆分:
核心代码
import pandas as pd # 匹配 ",$" 作为分隔符,只拆分一次 data_phones[['actual_price', 'installment_price']] = data_phones['prices'].str.split(r',\$', n=1, expand=True) # 补回第二个价格丢失的开头$ data_phones['installment_price'] = data_phones['installment_price'].apply(lambda x: f'${x}' if pd.notna(x) else x)
代码说明
r',\$':正则表达式,精准匹配逗号后紧跟美元符号的位置,这正是两个价格的分隔点,不会误拆千分位逗号。n=1:限制只拆分一次,适配你的数据中最多两个价格的场景。- 补回
$:拆分后第二个价格会丢失开头的$,用lambda表达式补上,保证格式统一。
可选:将价格转为数值类型
如果需要把价格转成可计算的数值,可进一步处理:
def clean_price(price_str): if pd.isna(price_str): return None # 移除$和千分位逗号,转为浮点数 return float(price_str.replace('$', '').replace(',', '')) data_phones['actual_price'] = data_phones['actual_price'].apply(clean_price) data_phones['installment_price'] = data_phones['installment_price'].apply(clean_price)
测试结果
用你的示例数据测试,拆分后原始格式的结果:
| prices | actual_price | installment_price |
|---|---|---|
| $1,149.99,$1,249.99 | $1,149.99 | $1,249.99 |
| $124.99 | $124.99 | NaN |
| $549.95 | $549.95 | NaN |
| $149.00,$159.99 | $149.00 | $159.99 |
转为数值后的结果:
| prices | actual_price | installment_price |
|---|---|---|
| $1,149.99,$1,249.99 | 1149.99 | 1249.99 |
| $124.99 | 124.99 | NaN |
| $549.95 | 549.95 | NaN |
| $149.00,$159.99 | 149.00 | 159.99 |
内容的提问来源于stack exchange,提问作者Fanny Oliver
相关产品推荐
相关产品推荐

