使用 map 将类型为 Int32 的新列添加到 julia 数据帧



我有一个字符串列数据,其值为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)

最新更新