如何用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
相关产品推荐
相关产品推荐

