如何在Julia(版本0.3)DataFrame中更改多个列名?

时间:2014-02-04 17:48:14

标签: julia

例如,假设您使用20列创建一个Julia DataFrame:

y=convert(DataFrame, randn(10,20))

如何将列名(:x1 ... :x20)转换为其他内容,例如(:col1, ..., :col20),等等?

9 个答案:

答案 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是一个以旧列名(符号)作为输入的函数   和新列名(符号)作为输出。

这在https://github.com/JuliaStats/DataFrames.jl/blob/7e2f48ad9f31185d279fdd81d6413a79b7e42e87/src/abstractdataframe/abstractdataframe.jl

的代码中有记录

答案 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)])