首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换数据帧的每个值

转换数据帧的每个值
EN

Stack Overflow用户
提问于 2019-04-15 02:50:12
回答 1查看 53关注 0票数 1

我需要修改dataframe的每一列的值,以便在映射后,它们都包含在双引号中,但dataframe仍然保留其原始结构和标题。

我尝试通过将行更改为序列来映射值,但它丢失了输出数据帧中的标头。

将此读入作为输入数据帧:

代码语言:javascript
复制
|prodid|name   |city|
+------+-------+----+
|1     |Harshit|VNS |
|2     |Mohit  |BLR |
|2     |Mohit  |RAO |
|2     |Mohit  |BTR |
|3     |Rohit  |BOM |
|4     |Shobhit|KLK |

我尝试了以下代码。

代码语言:javascript
复制
val columns = df.columns
df.map{ row => 
           row.toSeq.map{col => "\""+col+"\"" }
    }.toDF(columns:_*)

但它会抛出一个错误,指出在映射的数据帧中只有一个头,即值。这是实际的结果(如果我去掉".df(columns:_*)"):

代码语言:javascript
复制
|               value|
+--------------------+
|["1", "Harshit", ...|
|["2", "Mohit", "B...|
|["2", "Mohit", "R...|
|["2", "Mohit", "B...|
|["3", "Rohit", "B...|
|["4", "Shobhit", ...|
+--------------------+

我的预期结果是:

代码语言:javascript
复制
|prodid|name     |city  |
+------+---------+------+
|"1"   |"Harshit"|"VNS" |
|"2"   |"Mohit"  |"BLR" |
|"2"   |"Mohit"  |"RAO" |
|"2"   |"Mohit"  |"BTR" |
|"3"   |"Rohit"  |"BOM" |
|"4"   |"Shobhit"|"KLK" |

注意:本例中只有3个标头,但我的原始数据有很多标头,所以不能手动输入每个标头,以防文件标头发生变化。如何从中获得修改后的值dataframe?

编辑:如果我需要对除整数以外的所有值使用引号。因此,输出类似于:

代码语言:javascript
复制
|prodid|name     |city  |
+------+---------+------+
|1     |"Harshit"|"VNS" |
|2     |"Mohit"  |"BLR" |
|2     |"Mohit"  |"RAO" |
|2     |"Mohit"  |"BTR" |
|3     |"Rohit"  |"BOM" |
|4     |"Shobhit"|"KLK" |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-15 03:10:18

使用select可能更容易:

代码语言:javascript
复制
val df = Seq((1, "Harshit", "VNS"), (2, "Mohit", "BLR"))
  .toDF("prodid", "name", "city")

df.select(df.schema.fields.map {
  case StructField(name, IntegerType, _, _) => col(name)
  case StructField(name, _, _, _) => format_string("\"%s\"", col(name)) as name
}:_*).show()

输出:

代码语言:javascript
复制
+------+---------+-----+
|prodid|     name| city|
+------+---------+-----+
|     1|"Harshit"|"VNS"|
|     2|  "Mohit"|"BLR"|
+------+---------+-----+

请注意,还有其他数字类型,如LongTypeDoubleType,因此可能也需要处理这些类型,或者只引用StringType等。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55678830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档