python - 清理和填充分类变量以进行数据科学分析
问题描述
我正在处理我的第一个机器学习问题,我正在努力清理我的数据集中的分类特征。我的目标是建立一个攀岩推荐系统。
问题1:
我有三列相关的列有错误信息:
现在的样子:
我希望它看起来像什么:
如果您按位置名称进行分组,则有不同的 location_id 编号和与该名称相关联的国家/地区。但是,这些差异中的每一个都有明显的赢家/明显多数。我有一个包含 200 万个条目的数据集,并且 location_id 和 location_country 的模式给定 location_name 指向一个答案(例如:clear_creek 的“300”和“USA”)。
使用 pandas/python,我如何按 location_name 对我的数据集进行分组,根据该位置名称计算 location_id 和 location_country 的模式,然后用这些基于 location_name 的模式计算替换整个 id 和 country 列以清理我的数据?
我玩过 groupby、replace、duplicated,但我认为最终我需要创建一个可以做到这一点的函数,老实说,我不知道从哪里开始。(我提前为我的编码天真道歉)我知道必须有一个解决方案,我只需要指出正确的方向。
问题2:
另外,有人对在我的 location_name 类别(42,012/2 百万)和 location_country(46,890/2 百万)列中填写 NaN 值有什么建议吗?最好保留为未知值吗?我觉得根据频率填充这些特征会对我的数据集产生可怕的偏见。
data = {'index': [1,2,3,4,5,6,7,8,9],
'location_name': ['kalaymous', 'kalaymous', 'kalaymous', 'kalaymous',
'clear_creek', 'clear_creek', 'clear_creek',
'clear_creek', 'clear_creek'],
'location_id': [100,100,0,100,300,625,300,300,300],
'location_country': ['GRC', 'GRC', 'ESP', 'GRC', 'USA', 'IRE',
'USA', 'USA', 'USA']}
df = pd.DataFrame.from_dict(data)
***寻找它返回:
improved_data = {'index': [1,2,3,4,5,6,7,8,9],
'location_name': ['kalaymous', 'kalaymous', 'kalaymous', 'kalaymous',
'clear_creek', 'clear_creek', 'clear_creek',
'clear_creek', 'clear_creek'],
'location_id': [100,100,100,100,300,300,300,300,300],
'location_country': ['GRC', 'GRC', 'GRC', 'GRC', 'USA', 'USA',
'USA', 'USA', 'USA']}
new_df = pd.DataFrame.from_dict(improved_data)
解决方案
我们可以.agg
结合使用pd.Series.mode
并将其转换回您的数据框map
:
m1 = df.groupby('location_name')['location_id'].agg(pd.Series.mode)
m2 = df.groupby('location_name')['location_country'].agg(pd.Series.mode)
df['location_id'] = df['location_name'].map(m1)
df['location_country'] = df['location_name'].map(m2)
print(df)
index location_name location_id location_country
0 1 kalaymous 100 GRC
1 2 kalaymous 100 GRC
2 3 kalaymous 100 GRC
3 4 kalaymous 100 GRC
4 5 clear_creek 300 USA
5 6 clear_creek 300 USA
6 7 clear_creek 300 USA
7 8 clear_creek 300 USA
8 9 clear_creek 300 USA
推荐阅读
- javascript - 为什么这个 Javascript 对象不会改变?
- java - 与 Executor 的 Spring 事务
- typescript - 高库存中 Measure-x 的注释及其工具栏没有出现在图表中,而是出现在下面的导航器中
- html - 如何重新附加动画
- spring-boot - maven 依赖 spring-cloud-starter 2.1.0.RELEASE 测试失败
- c++ - 为什么在已删除的默认 ctor 旁边定义一个空的副本 ctor 会使空列表的值初始化失败?
- python-3.x - 在 Elasticsearch 中插入数据时如何提供自己的 _id?
- php - 使用 facebook graph api 的 messanger 的可共享链接
- c - C - 程序中没有输出
- c# - 如何使用 C# 从网页中获取动态值?