例如,假设您使用20列创建一个Julia DataFrame:
y=convert(DataFrame, randn(10,20))
如何将列名(:x1 ... :x20)
转换为其他内容,例如(:col1, ..., :col20)
,等等?
答案 0 :(得分:21)
您可能会发现names!
功能更简洁:
julia> using DataFrames
julia> df = DataFrame(x1 = 1:2, x2 = 2:3, x3 = 3:4)
2x3 DataFrame
|-------|----|----|----|
| Row # | x1 | x2 | x3 |
| 1 | 1 | 2 | 3 |
| 2 | 2 | 3 | 4 |
julia> names!(df, [symbol("col$i") for i in 1:3])
Index([:col2=>2,:col1=>1,:col3=>3],[:col1,:col2,:col3])
julia> df
2x3 DataFrame
|-------|------|------|------|
| Row # | col1 | col2 | col3 |
| 1 | 1 | 2 | 3 |
| 2 | 2 | 3 | 4 |
答案 1 :(得分:6)
执行此操作的一种方法是使用rename!
功能。重命名函数的方法采用DataFrame
作为输入,但只允许您一次更改单个列名称(截至2014年1月4日的开发版本0.3分支)。查看DataFrames存储库中的Index.jl
代码,可以找到适合我的解决方案:
rename!(y.colindex, [(symbol("x$i")=>symbol("col$i")) for i in 1:20])
y.colindex
返回数据帧y
的索引,下一个参数创建一个字典,将旧列符号映射到新列符号。我想,当别人需要这个时,会有更好的方法来做到这一点,但我只花了几个小时在Julia的开发版本0.3中搞清楚这一点,所以我想我会分享!
答案 2 :(得分:5)
作为对@JohnMylesWhite答案的更新,names!
中不推荐使用DataFrames v 0.20.2
函数。解决此问题的最新方法是使用rename!
函数:
import DataFrames
DF = DataFrames
df = DF.DataFrame(x1 = 1:2, x2 = 2:3, x3 = 3:4)
println(df)
DF.rename!(df, [Symbol("Col$i") for i in 1:size(df,2)])
println(df)
答案 3 :(得分:2)
<强>更新强>: 对于Julia 0.4,如John Myles White所述,所有名称都可以改为:
names!(df::AbstractDataFrame, vals)
其中vals
是Vector {Symbol}的长度相同
df
中的列数。
具体名称可以改为:
rename!(df::AbstractDataFrame, from::Symbol, to::Symbol)
rename!(df::AbstractDataFrame, d::Associative)
rename!(f::Function, df::AbstractDataFrame)
其中d
是将原始名称映射到新名称的关联类型
f
是一个以旧列名(符号)作为输入的函数
和新列名(符号)作为输出。
答案 4 :(得分:1)
v1.1.0
一个人可以通过
直接更改列名names!(df, colNames_as_Symbols)
要使用字符串向量重命名列,可以通过
完成names!(df, Symbol.(colNames_as_strings) )
答案 5 :(得分:1)
# import Pkg; Pkg.add("DataFrames")
using DataFrames
问题已经回答,但是为了更加清楚,有时您只想指定名称而不使用循环(即过度设计):
rename!(df, [:Date, :feature_1, :feature_2 ], makeunique=true)
示例输出:
141 rows × 3 columns
Date feature_1 feature_2
Date Float64? Float64?
1 2020-08-03 44.3 missing
答案 6 :(得分:1)
对包含新名称的数组使用重命名函数:
Vector_with_names = ["col1","col2","col3"]
rename!(df,Vector_with_names)
答案 7 :(得分:0)
使用John的数据框,我必须使用colnames!
而不是names!
df = DataFrame(x1 = 1:2, x2 = 2:3, x3 = 3:4)
colnames!(df, ["col$i" for i in 1:3])
我的Julia版本是0.2.1
答案 8 :(得分:0)
这是Julia 1.1.1的简短答案:
names!(df, [Symbol("Col$i") for i in 1:size(df,2)])