我有一个混合类型的数据集,需要转换为数字,同时仍保留字符类型数据中的信息。我目前的解决方案是在R中,但我现在需要将它转换为Python,因为接收此脚本的人不知道或想要转向学习R,这是可以理解的。是否可以使用Pandas库在Python中实现这一点?如果是这样,那么如何实现这一目标呢?
library(data.table)
library(stringr)
dat <- data.table(x = c('No Data', '2', 'Testing', 'Offline'),
y = c('2', 'No Data', '4', 'Testing'),
z = c(1, 2, 3, 6))
select_cols <- c('x','y')
dat[, paste0(select_cols,'_no_data') := lapply(.SD, function(x) as.numeric(str_detect(x, 'No Data'))), .SDcols = select_cols]
dat[, paste0(select_cols,'_offline') := lapply(.SD, function(x) as.numeric(str_detect(x, 'Offline'))), .SDcols = select_cols]
dat[, paste0(select_cols,'_testing') := lapply(.SD, function(x) as.numeric(str_detect(x, 'Testing'))), .SDcols = select_cols]
dat[, paste0(select_cols) := lapply(.SD, function(x) str_replace(x, 'No Data|Offline|Testing', '0')), .SDcols = select_cols]
dat[, paste0(select_cols) := lapply(.SD, function(x) as.numeric(x)), .SDcols = select_cols]
dat
编辑:打印出原始数据和预处理数据
x y z
No Data 2 1
2 No Data 2
Testing 4 3
Offline Testing 6
x y z x_no_data y_no_data x_offline y_offline x_testing y_testing
0 2 1 1 0 0 0 0 0
2 0 2 0 1 0 0 0 0
0 4 3 0 0 0 0 1 0
0 0 6 0 0 1 0 0 1
答案 0 :(得分:1)
这是一个解决方案,它的主要部分是pd.get_dummies
,它为您执行单热编码,带有参数errors = "coerce"
的{{3}}方法会更改您的原始{ <1}}和x
列以您想要的方式。
步骤如下:
1)使用y
创建虚拟列,仅适用于您编码的列为数字的行。这是通过pd.get_dummies
实现的,例如
2) pd.to_numeric()
原始数据框的虚拟列
3)强制您的原始pd.get_dummies(df.x.loc[~df.x.str.isnumeric()], prefix='x')
和x
数字类型,y
当不可能时,最后替换NaN
s与NaN
0