Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia DataFrame列以数字开头?_Julia - Fatal编程技术网

Julia DataFrame列以数字开头?

Julia DataFrame列以数字开头?,julia,Julia,这可能是一个愚蠢的问题,但就我的一生而言,我不知道如何让Julia读取列名以数字开头的csv文件,并在数据帧中使用它们。如何做到这一点 例如,假设我有一个文件“test.csv”,其中包含以下内容: ,1Y,2Y,3Y 1Y,11,12,13 2Y,21,22,23 如果我只使用readtable(),我会得到以下结果: julia> using DataFrames julia> df = readtable("test.csv") 2x4 DataFrames.DataFra

这可能是一个愚蠢的问题,但就我的一生而言,我不知道如何让Julia读取列名以数字开头的csv文件,并在数据帧中使用它们。如何做到这一点

例如,假设我有一个文件“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”,等等?

不幸的是,在数据帧中不能使用数字来开始名称

确保此限制保持如下状态


我相信这是因为在julia中解析是如何发生的:
:aa
命名一个符号,而
:2aa
是一个值(考虑到
1:2aa
是一个范围更为合理)

问题是,在数据帧中,列名是,而不是以数字开头(见下面的注释)


您可以通过执行例如
typeof(:2)
来看到这一点,它将返回
Int64
,而不是(正如您可能期望的那样)
Symbol
。因此,要将列名转换为可用格式,DataFrames必须以字母作为前缀-
typeof(:x2)
将返回
Symbol
,因此是有效的列名

您可以使用
重命名!()
导入后:

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 │

不过,您以后可能会在代码中遇到问题,最好避免列名以数字开头…

严格来说,符号可以以数字开头,例如,
Symbol(“1Y”)
,但它们会变得非常笨拙。关键是输入文件中有这样的列名。