2017-04-25 129 views
1

我想获得一个数据框形式的列浮动到字符串。我曾尝试如何在Julia中将列数据类型从float更改为string?

df = readtable("data.csv", coltypes = {String, String, String, String, String, Float64, Float64, String}); 

但还是抱怨

syntax: { } vector syntax is discontinued 

我也试过

dfB[:serial] = string(dfB[:serial]) 

,但它也不能工作。所以,我想知道在Julia中更改列数据类型的正确方法是什么。

THX

回答

3

在你的第一次尝试,朱莉娅告诉你问题是什么 - 你不能让一个向量与{},你需要使用[]。此外,关键字参数的名称应该是eltypes而不是coltypes

第二次尝试,你没有浮动,你有一个浮动向量。因此,要更改类型,您需要更改所有元素的类型。在Julia中,向量上的元素操作通过'点'语法来概括,例如, string.(collect(dfB[:serial]))。当前需要collect才能将DataArray首先转换为正常的数组 - 如果DataArray包含NA,则这将失败。恕我直言,DataFrames接口仍然相当不可靠,所以期待像这种ATM这样的一些令人头疼的事情。

+0

谢谢你的回答。不幸的是,他们都不适合我的情况。第一个提出的解决方案引发了“MethodError:没有匹配可读表的方法(:: String; coltypes = DataType [String,String,String,String,String,Float64,Float64,String])”,第二个显示“MethodError:Can not'convert '一个String类型的对象到一个Int64类型的对象 这可能是由于调用构造函数Int64(...), 而产生的,因为类型构造函数返回转换方法。“任何想法为什么? – bensw

+0

'string。(x)'调用绝对不应该引发这个异常。似乎你想从'String'转换为'Int',而不是相反。你能显示你跑过的代码吗?也许是一个演示数据集? – niczky12

+0

确实会导致该错误,对不起。这很奇怪。 目前的解决方法是'string。(collect(df [:serial]))',它在转换为String之前将DataArray转换为Array。 –

相关问题