python - 重命名数据框列名
问题描述
我有一个数据框 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] 。
在这里用一些代码指导我..
解决方案
这是Scala中的一个解决方案。
由于df_one
是一个小型数据集(即使总列数为数千),因此可以collect
将 DataFrame 作为Array
. 现在,collect
对 DataFrame 进行 -ing 会产生一个Array
of 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|
// +----+---+-------+
推荐阅读
- c# - 如何在linq c#中的字符串参数之间应用<运算符
- android - 错误:无法解决:com.google.firebase:firebase-messaging:19.2.0
- reactjs - 关闭外部 click-reactjs 上的组件
- angular-material - 我有一个关于中微子工作室小吃店的问题
- actions-on-google - 是否可以在 Google Action 中使用 INTENT 而不是 STRING 作为列表标题?
- javascript - 类型脚本:如何指定 array.splice 的类型
- c# - 跨平台输入操纵杆在 Unity 中不起作用
- python-3.x - 如何将年龄划分为区间
- swift - 精灵在开始时立即生成
- mariadb - HikariPool-1 - 无法验证连接 com.mysql.cj.jdbc.ConnectionImpl