Dataframe 从数据帧中的字符串提取整数

Dataframe 从数据帧中的字符串提取整数,dataframe,julia,Dataframe,Julia,我有一个如下所示的数据帧: df = DataFrame("Code" => ["W01", "W12","C04"]) df.code列始终是由1个字母和2个数字组成的3个字符的字符串。我需要将数字(如int)提取到一个新列,比如Code_int。所以“W01”将是1,“W12”将是12,依此类推。此列有180000条记录,具有这种精确的模式 到目前为止我所做的: 创建一个新列,如下所示: df=inser

我有一个如下所示的数据帧:

df = DataFrame("Code" => ["W01", "W12","C04"])
df.code
列始终是由1个字母和2个数字组成的3个字符的字符串。我需要将数字(如int)提取到一个新列,比如Code_int。所以“W01”将是1,“W12”将是12,依此类推。此列有180000条记录,具有这种精确的模式

到目前为止我所做的:

创建一个新列,如下所示:

df=insertcols!(df,4,:Code_Int=>0)
我试过这个:

df[:Code_Int]=[parse(Int64,x) for x in df[!,:Code]
我得到

ArgumentError: Invalid base 10 digit 'W' in "W01"

你差点就成功了。您只想解析字符串的整数部分(而不是字母),因此应该将
parse(Int64,x)
替换为
parse(Int64,x[2:end])


如果
x=“W12”
,那么
x[2:end]
(或
x[2:3]
)就是
“12”
,您可以将其解析为整数。

一个可能比仅使用索引更可靠的解决方案是使用正则表达式

julia> map(x -> parse(Int64, match(r"[[:digit:]]+", x).match), df.Code)
3-element Array{Int64,1}:
  1
 12
  4
您可以使用将列添加到数据帧中

insertcols!(df, :Code_Int => map(x -> parse(Int64, match(r"[[:digit:]]+", x).match), df.Code))


美好的天哪,我是哑巴。非常感谢你,伙计xD
df.Code_Int = map(x -> parse(Int64, match(r"[[:digit:]]+", x).match), df.Code)