2016-01-18 5 views
2

Это может быть глупый вопрос, но для жизни я не могу понять, как заставить Джулию читать файл csv с именами столбцов, которые начинаются с цифр и использовать их в DataFrames. Как это сделать?Julia DataFrame колонки, начинающиеся с цифры?

Например, у меня есть файл "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

К сожалению, вы не можете использовать числа для запуска имен в DataFrames.

code that does the parsing of names гарантирует, что это ограничение остается таким.

Я считаю, что это из-за того, как синтаксический происходит в Джулии: :aa имена символ, а :2aa это значение (имеет смысл, учитывая 1:2aa является диапазон)

4

Проблема в том, что в DataFrames, имена столбцов symbols, которые не предназначены (см. комментарий ниже), начинаются с числа.

Вы можете увидеть это, выполнив, например, typeof(:2), который вернет Int64, а не (как и следовало ожидать) Symbol. Таким образом, чтобы получить имена столбцов в пригодном для использования формате, DataFrames должен будет префикс его буквой - typeof(:x2) вернет Symbol и, следовательно, является допустимым именем столбца.

+1

Строго говоря, символы могут начать с номером, например, «Символ (« 1Y »)», но они становятся очень громоздкими. –

+0

Хорошая точка, соответственно, с поправками. –

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 │ 

Тем не менее могут возникнуть проблемы в коде, лучше избегать имен столбцов, начиная с номерами ...

+0

Точка - это то, что входные файлы имели эти имена столбцов. –

Смежные вопросы