You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按$符号拆分DataFrame行成多行报错求解决方案

解决DataFrame按$拆分description列并展开为多行的问题

嘿,我来帮你搞定这个问题~你遇到的AttributeError: 'float' object has no attribute 'split',根源是你的description列里存在缺失值(NaN)——在pandas里NaN属于float类型,自然没法调用字符串的split方法啦。下面给你两种可行的解决办法,更推荐第二种,既简洁又高效:

方案一:改进你的原有思路(处理缺失值)

先把description列统一转成字符串类型,把可能存在的NaN替换成空字符串,再调整你的循环逻辑:

import pandas as pd

# 先构造你的原始DataFrame(模拟数据)
old_df = pd.DataFrame({
    'category': ['puppy', 'crappy', 'squeeky', 'fluffy'],
    'description': ['dog$pup', 'cat$pet', 'animal', 'dog$pet']
})

# 处理可能的缺失值,统一转为字符串
old_df['description'] = old_df['description'].astype(str).replace('nan', '')

# 调整你的代码,避免空字符串拆分出空行
series_list = []
for _, row in old_df.iterrows():
    desc_parts = row['description'].split('$') if row['description'] else []
    series_list.append(pd.Series(row['category'], index=desc_parts))

new_df = pd.concat(series_list).reset_index()
new_df.columns = ['description', 'category']
new_df = new_df[['category', 'description']]

不过这种方法用了iterrows,如果你的DataFrame数据量很大,运行速度会比较慢,更推荐下面的内置方法。

方案二:用pandas的str.split + explode(强烈推荐)

从pandas 0.25版本开始,explode方法可以直接把列表类型的列展开成多行,简直是为这个需求量身定做的:

import pandas as pd

old_df = pd.DataFrame({
    'category': ['puppy', 'crappy', 'squeeky', 'fluffy'],
    'description': ['dog$pup', 'cat$pet', 'animal', 'dog$pet']
})

# 1. 把description按$拆分成列表,同时处理可能的NaN
old_df['description'] = old_df['description'].str.split('$')
# 给NaN填充空列表,避免explode报错
old_df['description'] = old_df['description'].fillna('').apply(lambda x: x if isinstance(x, list) else [x])

# 2. 一键展开列表为多行
new_df = old_df.explode('description').reset_index(drop=True)

运行后你就能得到想要的结果:

category description
0    puppy          dog
1    puppy          pup
2   crappy          cat
3   crappy          pet
4  squeeky        animal
5   fluffy          dog
6   fluffy          pet

再啰嗦下错误原因

如果你的原始数据里description列有缺失值(比如某行是空的),pandas会自动把该列的 dtype 变成float(因为NaN是float类型),这时候你调用row['description'].split('$')就会触发报错——float对象可没有split方法哦。上面的两种方案都提前处理了这种情况,确保我们操作的是字符串或列表类型。

内容的提问来源于stack exchange,提问作者Qubix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:14:22