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)