我有一个字符串列数据,其值为2.323456
,我想创建一个具有 Int32 值的新列,如下所示:2323456
.
我尝试使用df[!, :newcolumn]
和map
函数创建一个新列,还使用parse
将字符串解析为Int32。
这行得通。
但是,当我使用 map 执行额外的转换时,它会转换为Int64。
这是我的输入数据:
julia> df2 = DataFrame(low_str=["1.12345", "1.12346", "1.12347"]);
julia> pretty_table(df2, markdown)
| low_str |
| String |
|---------|
| 1.12345 |
| 1.12346 |
| 1.12347 |
我想将其转换为 Int32。所以我这样做:
julia> df2[!, :low] = map(x -> parse( Int32, string( x[1],x[3:7]) ), df2[:, :low_str]);
julia> pretty_table(df2, markdown)
| low_str | low |
| String | Int32 |
|---------|--------|
| 1.12345 | 112345 |
| 1.12346 | 112346 |
| 1.12347 | 112347 |
目前为止,一切都好。 现在我想向下舍入,所以我这样做:
julia> df2[!, :low] = map( x -> x - mod(x,5), df2[:, :low]);
julia> pretty_table(df2, markdown)
| low_str | low |
| String | Int64 |
|---------|--------|
| 1.12345 | 112345 |
| 1.12346 | 112345 |
| 1.12347 | 112345 |
数据已正确向下舍入,但现在的类型为 Int64,而不是预期的 Int32。
如何保留 Int32?
最简单的方法(同时就地,所以速度很快(是:
df2.low .-= mod.(df2.low, 5)
如果你想使用map!
那么这样的东西会产生你想要的结果:
map!(x -> x - mod(x,5), df2.low, df2.low)