数据集price列含双值,如何提取拆分后的单个元素生成新列?
解决方案
针对你遇到的price列多值提取问题,这里提供几个更可靠的方案:
方案1:利用str.split的expand参数拆分(推荐)
直接按任意空格拆分并展开成列,提取第一列后处理美元符号:
# 按任意数量空格拆分,展开为DataFrame后取第一列 no_na['Kaina'] = no_na['price'].str.split('\s+', expand=True)[0] # 移除美元符号并转换为浮点型 no_na['Kaina'] = no_na['Kaina'].str.replace('$', '', regex=False).astype(float)
优点:无需自定义函数,Pandas原生方法效率高,自动处理多空格问题,不会截断长价格。
方案2:自定义apply函数处理边缘情况
如果存在开头/结尾空格等特殊情况,可过滤空元素后提取:
def get_first_price(price_str): # 拆分后过滤空字符串,取第一个有效价格片段 valid_parts = [part for part in price_str.split(' ') if part.strip()] if valid_parts: # 移除$并转浮点型 return float(valid_parts[0].replace('$', '')) return None no_na['Kaina'] = no_na['price'].apply(get_first_price)
优点:兼容性强,能处理各种空格分布的情况,返回None处理异常值。
方案3:正则表达式精准提取
如果价格格式固定(以$开头,后跟小数),用正则直接匹配数值部分:
no_na['Kaina'] = no_na['price'].str.extract(r'^\$?(\d+\.\d+)', expand=False).astype(float)
解释:正则^\$?(\d+\.\d+)匹配开头可选的$,然后捕获小数形式的价格数值,直接提取后转浮点型,精准高效。
内容的提问来源于stack exchange,提问作者Mindaugas
相关产品推荐
相关产品推荐

