抽取符合条件的数据(我这里某种分类的数据条数大于1000)作为新的数据集,原来的数据集删除抽取的部分
数据概览
import numpy as np
import pandas as pd
train_df = pd.read_excel('./data/train_set2_cyt_20220713.xlsx')
train_df.head()
Unnamed: 0 | prod_name | catid_4 | catid_5 | |
---|---|---|---|---|
0 | 0 | 宁安堡 宁夏特产 甲级 中宁枸杞白250g | 14011701 | 14011701001 |
1 | 1 | 一品玉 坚果炒货 休闲零食 新疆巴旦木400g/袋 | 14011901 | 14011901003 |
2 | 2 | 富昌 南北干货 宁夏特产 枸杞子 200g | 14011701 | 14011701001 |
3 | 3 | 果园老农 巴旦木 坚果炒货 零食坚果 巴旦木仁美国扁桃仁100g*3 | 14011901 | 14011901003 |
4 | 4 | 正林 休闲零食 坚果炒货 3A黑瓜子500g/袋 | 14011901 | 14011901010 |
train_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 659614 entries, 0 to 659613
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 659614 non-null int64
1 prod_name 659614 non-null object
2 catid_4 659614 non-null int64
3 catid_5 659614 non-null int64
dtypes: int64(3), object(1)
memory usage: 20.1+ MB
# 删掉多余的列
train_df = train_df.drop(train_df.columns[0],axis = 1)
train_df.head()
prod_name | catid_4 | catid_5 | |
---|---|---|---|
0 | 宁安堡 宁夏特产 甲级 中宁枸杞白250g | 14011701 | 14011701001 |
1 | 一品玉 坚果炒货 休闲零食 新疆巴旦木400g/袋 | 14011901 | 14011901003 |
2 | 富昌 南北干货 宁夏特产 枸杞子 200g | 14011701 | 14011701001 |
3 | 果园老农 巴旦木 坚果炒货 零食坚果 巴旦木仁美国扁桃仁100g*3 | 14011901 | 14011901003 |
4 | 正林 休闲零食 坚果炒货 3A黑瓜子500g/袋 | 14011901 | 14011901010 |
思路及实现
在这个例子中,我们假设要抽取每个分类中的前 5 条数据,只有当分类数据量超过 1000 条时才会被抽取。cat_counts[cat_counts >= threshold] 表示选择分类数据量超过阈值的分类,pd.concat([df[df[‘catid_5’] == cat].sample(n) for cat in cat_to_keep]) 表示在这些分类中随机抽取 n 条数据,并使用 concat() 方法将这些数据合并成一个新的 DataFrame。
最后,我们使用 drop() 方法将抽取出来的数据从原数据集中删除,df = df.drop(df_to_keep.index) 表示删除索引为 df_to_keep 的行,即抽取出来的数据。
# 判断catid_5的分布情况,分布较多的可以考虑抽取
import pandas as pd
# 获取catid_5的分布情况
cat_counts = train_df['catid_5'].value_counts()
# 根据条件抽取数据
n = 5 # 抽取5条数据
threshold = 1000 # 分类数据量的阈值
cat_to_keep = cat_counts[cat_counts >= threshold].index
df_to_keep = pd.concat([train_df[train_df['catid_5'] == cat].sample(n) for cat in cat_to_keep])
# 将抽取出来的数据在原数据集中删除
df = train_df.drop(df_to_keep.index)
# 重置index
df.reset_index(drop = True,inplace = True)
df_to_keep.reset_index(drop = True,inplace = True)
# 查看抽取出来的数据
print(df_to_keep)
prod_name catid_4 catid_5
0 思宏 红满疆枣夹核桃仁500g袋装 红枣夹核桃 新老包装随机发货 14011901 14011901013
1 坚果零食特产2017年新货临安水煮手剥大籽山核桃 小核桃1罐装 14011901 14011901013
2 2017云南大姚纸皮薄皮核桃 2000g 原味无漂白 香源牌 包邮 14011901 14011901013
3 2017年新货原味新鲜优质薄皮干生核桃仁手剥大核桃肉500g1斤包邮 14011901 14011901013
4 包邮坚果特产东阳荣耀喜滋缘熟纸皮核桃2500g/箱 14011901 14011901013
... ... ... ...
1280 正宗福建泉州安溪蓬莱冬瓜糖冬瓜条传统蜜饯儿时味道 零添加 500g 14011204 14011204005
1281 嘉乐城 椰皇冬瓜饼 冬瓜糕 冬瓜翅 冬蓉馅皮薄馅靓 台山特色手信 14011204 14011204005
1282 海丰特产应利冬瓜糖400克3袋包邮 14011204 14011204005
1283 冬瓜荷叶茶 :冬瓜、荷叶、 山楂、决明子、大麦 160克 14011204 14011204005
1284 密云新鲜蔬菜冬瓜 2斤左右 农家肥无农药 应季蔬菜 健康美味 14011204 14011204005
[1285 rows x 3 columns]
# 保存训练集以及
df_to_keep.to_excel('./data/test-set23-3-24.xlsx',index = False)
df.to_excel('./data/train_set23-3-24.xlsx',index = False)