Julia DataFrame列以数字开头?
这可能是一个愚蠢的问题,但就我的一生而言,我不知道如何让Julia读取列名以数字开头的csv文件,并在数据帧中使用它们。如何做到这一点 例如,假设我有一个文件“test.csv”,其中包含以下内容: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
,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”)
,但它们会变得非常笨拙。关键是输入文件中有这样的列名。