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

如何用Pandas和Python拆分DataFrame列并清洗数据(Jupyter环境)

解决方案:DataFrame重塑与收入列清洗

我来帮你搞定这个DataFrame的转换和清洗任务,咱们一步步来操作:

1. 先复现你的原始数据

首先,先把你提供的单列DataFrame构造出来,方便后续操作:

import pandas as pd

# 原始单列DataFrame
df = pd.DataFrame({
    'col': [
        '2017 / something',
        '$5.91 (× 1)',
        'Premium',
        '2017 / anotherthing',
        '$16.0 (× 1)',
        'Business'
    ]
})

2. 将单列数据重塑为三列结构

观察你的数据可以发现,每3行对应一条完整的记录:第一行是col(年份/描述)、第二行是revenue(收入)、第三行是plan(套餐类型)。我们可以用分组的方式把它转成三列:

import numpy as np

# 创建分组键:每3行分为一组
group_keys = np.arange(len(df)) // 3
# 分组后将每组的列表转成三列的DataFrame
new_df = df.groupby(group_keys)['col'].agg(list).apply(pd.Series)
new_df.columns = ['col', 'revenue', 'plan']

这一步执行后,new_df就已经是你想要的三列结构了,只是revenue列还带着不需要的符号。

3. 清洗revenue列

接下来我们要去掉美元符号$和括号里的内容,最后转成数值类型:

# 去掉美元符号
new_df['revenue'] = new_df['revenue'].str.replace(r'\$', '', regex=True)
# 去掉括号及括号内的所有内容(包括前面的空格)
new_df['revenue'] = new_df['revenue'].str.replace(r'\s*\(.*\)', '', regex=True)
# 转换为浮点型数值
new_df['revenue'] = new_df['revenue'].astype(float)

最终结果

执行完上面的步骤后,打印new_df就能得到干净的结果:

print(new_df)

输出:

col  revenue      plan
0    2017 / something     5.91   Premium
1  2017 / anotherthing    16.00  Business

如果你的数据分组规律固定是每3行一组,这个方法完全适用;如果后续有不同的分组逻辑,只需要调整group_keys的生成方式就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:18:11