python - 从包含 JSON 数据的数据框创建新的数据框
问题描述
这是我第一次问 SO。我有一个这样的数据框
+----------+----------------------------------+
| id| data|
+----------+----------------------------------+
| '001'| '[{"index":1}, {"index": 2}]'|
| '002'| '[{"index":3}, {"index": 4}]'|
+----------+----------------------------------+
我需要像这样将它转换为新的 DF
+----------+---------+
| id| index|
+----------+---------+
| '001'| 1|
| '001'| 2|
| '002'| 3|
| '002'| 4|
+----------+---------+
有没有办法做到这一点?谢谢你。
解决方案
这是我制定的另一种方法。它涉及各种语句,但是,所有这些语句都可以组合成一个语句以产生所需的输出。
创建名为“df”的初始数据框后,
df.show(5,False)
+---+----------------------------+
|id |data |
+---+----------------------------+
|001|[{"index": 1}, {"index": 2}]|
|002|[{"index": 3}, {"index": 4}]|
+---+----------------------------+
df2 = df.select(col('id'),split(df.data,',').alias('list'))
这将创建一个名为“df2”的数据框,该数据框将第二列拆分为数组类型。
df2.show(5,False)
+---+-------------------------------+
|id |list |
+---+-------------------------------+
|001|[[{"index": 1}, {"index": 2}]]|
|002|[[{"index": 3}, {"index": 4}]]|
+---+-------------------------------+
然后,运行explode函数, df3 = df2.select(col('id'),explode(df2.list))
df3.show(5,False)
+---+--------------+
|id |col |
+---+--------------+
|001|[{"index": 1} |
|001| {"index": 2}]|
|002|[{"index": 3} |
|002| {"index": 4}]|
+---+--------------+
紧接着 , df4 = df3.select(col('id'),regexp_extract('col','(\d+)',1).alias('no_only')) 这个转换检查分解列中的数字。
df4.show(5,False)
+---+-------+
|id |no_only|
+---+-------+
|001|1 |
|001|2 |
|002|3 |
|002|4 |
+---+-------+
推荐阅读
- c - 指向c函数的指针?
- c# - 可为空的引用类型和构造函数警告
- huggingface-transformers - 如何解码来自 TFGPT2Model 的输出序列?
- r - 尝试在 R 中导入逗号分隔的数据
- perl - 如何从 TMDB 中找到电影的评分
- regex - 多行延迟匹配节点正则表达式
- awk - 如何使用 Sed/gedit 删除文件中“:”之后的所有内容并将输出写入另一个文件?
- r - 为什么 lm_robust() HC3 标准误差小于 coeftest() HC0 标准误差?
- c# - IIS 不呈现 ASP.net MVC 视图。它列出了物理路径中的所有文件和文件夹
- ionic-framework - Ionic v4:将 Logo 放在 ion-header 的中心