Julia DataFrame列以数字开头?

时间:2016-01-18 15:19:43

标签: julia

这可能是一个愚蠢的问题,但对于我的生活,我无法弄清楚如何让Julia读取一个csv文件,其列名以数字开头并在DataFrames中使用。如何做到这一点?

例如,假设我有文件" test.csv"其中包含以下内容:

,1Y,2Y,3Y
1Y,11,12,13
2Y,21,22,23

如果我只使用readtable(),我会得到这个:

julia> using DataFrames

julia> df = readtable("test.csv")
2x4 DataFrames.DataFrame
| Row | x    | x1Y | x2Y | x3Y |
|-----|------|-----|-----|-----|
| 1   | "1Y" | 11  | 12  | 13  |
| 2   | "2Y" | 21  | 22  | 23  |

是什么给出的?如何让列名成为他们应该是的," 1Y," 2Y等?

3 个答案:

答案 0 :(得分:4)

问题在于,在DataFrame中,列名称为symbols,这并不意味着(请参​​阅下面的评论)以数字开头。

您可以通过以下方式查看: typeof(:2),将返回Int64,而不是(正如您所料)Symbol。因此,要使您的列名成为可用格式,DataFrames必须在其前面添加一个字母 - typeof(:x2)将返回Symbol,因此是有效的列名。

答案 1 :(得分:3)

很遗憾,您无法使用数字在DataFrame中开始名称。

code that does the parsing of names确保此限制保持不变。

我认为这是因为在julia中进行解析::aa命名一个符号,而:2aa是一个值(考虑到1:2aa是一个范围更有意义)

答案 2 :(得分:1)

您可以在导入后使用rename!()

df = csv"""
,1Y,2Y,3Y
1Y,11,12,13
2Y,21,22,23
"""
rename!(df, Dict(:x1Y =>Symbol("1Y"), :x2Y=>Symbol("2Y"), :x3Y=>Symbol("3Y")  ))

2×4 DataFrames.DataFrame
│ Row │ x    │ 1Y │ 2Y │ 3Y │
├─────┼──────┼────┼────┼────┤
│ 1   │ "1Y" │ 11 │ 12 │ 13 │
│ 2   │ "2Y" │ 21 │ 22 │ 23 │

您的代码稍后可能会遇到问题,最好避免使用以数字开头的列名...