重命名数据框列名
Posted
技术标签:
【中文标题】重命名数据框列名【英文标题】:Renaming dataframe column name 【发布时间】:2019-05-11 14:39:38 【问题描述】:我有一个数据框 df_one, df_two 如下所示:
df_one.show()
-------------
|Column_Name|
-------------
|NAME |
|ID |
|COUNTRY |
-------------
df_two.show()
-------------
|_c0|_c1|_c2|
-------------
|AAA|001|US |
|BBB|002|UK |
|CCC|003|IN |
|DDD|004|FR |
-------------
我正在尝试重命名数据框 df_two 的列,如下所示:
------------- ----
|NAME|ID |COUNTRY|
------------------
|AAA |001| US |
|BBB |002| UK |
|CCC |003| IN |
|DDD |004| FR |
------------------
暂时我创建了 seq 并得到了上述结果
val newColumn = Seq("NAME", "ID", "COUNTRY")
val df = df_two.toDF(newColumn:_*)
但现在我必须从 df_one 读取 column(Column_Name) 并分别重命名数据框 df_two 的列名。
我也尝试从 df_one 读取列值,但它返回 Seq[Any] 并且我需要 Seq[String] 。
在这里用一些代码指导我..
【问题讨论】:
【参考方案1】:这是 Scala 中的解决方案。
由于df_one
是一个小数据集(即使总列数以千为单位),因此可以将collect
DataFrame 用作Array
。现在,collect
-ing DataFrame 将导致 Array
的 Row
s:
df_one.collect
// res1: Array[org.apache.spark.sql.Row] = Array([NAME], [ID], [COUNTRY])
要解开Row
s(单个String
),只需应用Row
方法getString
:
df_one.collect.map(_.getString(0))
// res2: Array[String] = Array(NAME, ID, COUNTRY)
总而言之:
val df_one = Seq(
"NAME", "ID", "COUNTRY"
).toDF("Column_Name")
val df_two = Seq(
("AAA", "001", "US"),
("BBB", "002", "UK"),
("CCC", "003", "IN"),
("DDD", "004", "FR")
).toDF("_c0", "_c1", "_c2")
val colNames = df_one.collect.map(_.getString(0))
df_two.toDF(colNames: _*).show
// +----+---+-------+
// |NAME| ID|COUNTRY|
// +----+---+-------+
// | AAA|001| US|
// | BBB|002| UK|
// | CCC|003| IN|
// | DDD|004| FR|
// +----+---+-------+
【讨论】:
【参考方案2】:试试:
df_two.columns = df_one['Column_Name']
【讨论】:
以上是关于重命名数据框列名的主要内容,如果未能解决你的问题,请参考以下文章
Pandas df.itertuples 在打印时重命名数据框列
R语言rename重命名dataframe的列名实战:rename重命名dataframe的列名(写错的列名不会被重命名)