python - 数据框 regexp_extract 从字符串中提取值,如数组
问题描述
我的 DataFrame 如下所示:
StudentID Marks
100 ["20", "25.5", "40.23", "50"]
200 ["30", "20", "25", "40"]
300 ["20", "25", "50", "35"]
我需要marks
在数组中提取并创建一个新的 DataFrame。但是,我无法提取超出 DF 中的第二个值(不知道如何通过 regex 选择所有标记([0-9]+)(?:\.[0-9]+){3}
。
df1.select(regexp_extract('StudentID', '(\w+)(,)', 1).alias("C1"),
regexp_extract('Marks', '([0-9]+)(?:\.[0-9]+){3}', 0).alias("C2"))
最终,需要创建一个具有以下格式的新 DataFrame:
StudentID C1 C2 C3 C4
100 20 25.5 40.23 50
200 30 20 25 40
300 20 25 50 35
先感谢您。
解决方案
您可以拆分字符串,然后使用element_at
将子字符串拉到单独的列中:
df1.withColumn("marks_array", split( regexp_replace(col("Marks"), "\\[|\\]|\"", ""), ",") )
.withColumn("C1", element_at(col("marks_array"), 1))
.withColumn("C2", element_at(col("marks_array"), 2))
.withColumn("C3", element_at(col("marks_array"), 3))
.withColumn("C4", element_at(col("marks_array"), 4))
.drop("marks_array", "Marks")
.show(false)
+---------+---+-----+------+---+
|StudentID|C1 |C2 |C3 |C4 |
+---------+---+-----+------+---+
|100 |20 | 25.5| 40.23| 50|
|200 |30 | 20 | 25 | 40|
|300 |20 | 25 | 50 | 35|
+---------+---+-----+------+---+
推荐阅读
- php - Craft CMS element-api 如何在条目中获取类别字段的值
- amazon-web-services - 有没有办法设置一个带有 lambda 函数的计时器,我可以从我的前端开始和停止?
- reactjs - 将 api/json 数据从一个组件传递到 ReactJs 上的另一个组件
- python - 我想读取具有多个名称的字符串并将它们与列表 Python 中的名称匹配
- c# - 实体框架 - 在不总是匹配时进行连接
- javascript - 调用materialize css modal tru php edit
- kubernetes - 如何配置本地 kubectl 远程访问集群?
- javascript - 带有凭据和 Client_ID 的 JavaScript Fetch api (Cornerstone API)
- r - 循环回归永久实体,保存所有实体的预测值
- angular - 如何在使用 Angular 的 Electron 应用程序中使用代码覆盖率?