如何使用Pandas读取CSV并将特定行转为分类列
解决方案(基于Pandas)
假设你的CSV文件列名为Product, Quantity, Unit $, Total $,可以按以下步骤处理:
导入依赖并读取CSV
先导入Pandas库,读取原始CSV文件:import pandas as pd # 读取CSV,若列名有特殊情况可调整参数,比如用header=0指定第一行为列名 df = pd.read_csv('your_sales_report.csv')标记并提取卖家信息
卖家行的特征是Quantity/Unit $/Total $为空,仅Product列有卖家标识。新增SELLER列,将卖家行的Product值填入,非卖家行暂留空:# 判断是否为卖家行:Quantity为空且Product不为空(可根据实际报表结构调整判断逻辑) is_seller_row = df['Quantity'].isna() & df['Product'].notna() # 给SELLER列赋值:卖家行取Product的值,其他行设为NaN df['SELLER'] = df.loc[is_seller_row, 'Product']向前填充卖家信息
用ffill()方法将卖家信息填充到下方所有对应的商品行:df['SELLER'] = df['SELLER'].ffill()清理无效的卖家行
过滤掉原始的卖家行(这类行无有效销售数据):# 保留非卖家行,即Quantity不为空的行,重置索引避免断号 final_df = df[~is_seller_row].reset_index(drop=True)可选:整理卖家名称
如果卖家标识是1 - JOHN这类带编号的格式,可提取纯名字:final_df['SELLER'] = final_df['SELLER'].str.split(' - ', expand=True)[1]
示例效果
原始CSV内容:
Product,Quantity,Unit $,Total $ 1 - JOHN,,, Apple,10,5,50 Banana,20,3,60 2 - JACK,,, Orange,15,4,60 Grape,5,10,50
处理后final_df的结果:
| Product | Quantity | Unit $ | Total $ | SELLER |
|---|---|---|---|---|
| Apple | 10 | 5 | 50 | JOHN |
| Banana | 20 | 3 | 60 | JOHN |
| Orange | 15 | 4 | 60 | JACK |
| Grape | 5 | 10 | 50 | JACK |
内容的提问来源于stack exchange,提问作者Leonardo Nascimento
相关产品推荐
相关产品推荐

