pyspark如何使用两个标题行取消转csv [重复]
Posted
技术标签:
【中文标题】pyspark如何使用两个标题行取消转csv [重复]【英文标题】:pyspark how to unpivot the csv with two header lines [duplicate] 【发布时间】:2020-08-03 03:09:02 【问题描述】:如何使用 pyspark 或 pandas 来实现以下转换?非常感谢。 源文件为 csv,包含以下信息:
预期:
【问题讨论】:
您能否添加一个代码来创建您的示例数据以及您到目前为止所尝试的内容以及您遇到的问题? 源文件为csv文件。 这能回答你的问题吗? Unpivot in spark-sql/pyspark 【参考方案1】:我假设您的源 CSV 文件如下:
,Group_1,Group_2
,Sub_Group_1,Sub_Group_1
Maturity,7/31/20,7/31/20
0.1,0.2,0.3
0.2,0.3,0.4
注意:
前 2 行有初始空格(前 2 个 MultiIndex 的名称 第一列的级别),否则 read_csv 会给他们 未命名...默认名称, 列上实际上有 3 个 MultiIndex 级别(第三级 包含日期)。我读到他们打电话给df = pd.read_csv('Input.csv', header=[0,1,2])
和
内容是:
Group_1 Group_2
Sub_Group_1 Sub_Group_1
Maturity 7/31/20 7/31/20
0 0.1 0.2 0.3
1 0.2 0.3 0.4
(你应该包含它而不是图片)。
第一步是融化:
result = pd.melt(df, id_vars=[(' ', ' ', 'Maturity')],
var_name=['Group_Name', 'Sub_Group_Name', 'Date'])
请注意,在上面的代码中,我将 id_vars 指定为 tuple, 有 2 个顶部元素作为空格(这就是为什么我做出关于 初始空格)。
结果是:
( , , Maturity) Group_Name Sub_Group_Name Date value
0 0.1 Group_1 Sub_Group_1 7/31/20 0.2
1 0.2 Group_1 Sub_Group_1 7/31/20 0.3
2 0.1 Group_2 Sub_Group_1 7/31/20 0.3
3 0.2 Group_2 Sub_Group_1 7/31/20 0.4
而唯一要做的就是重命名第一列:
result.rename(columns=result.columns[0]: 'Maturity', inplace=True)
现在,当你打印结果时,你会得到:
Maturity Group_Name Sub_Group_Name Date value
0 0.1 Group_1 Sub_Group_1 7/31/20 0.2
1 0.2 Group_1 Sub_Group_1 7/31/20 0.3
2 0.1 Group_2 Sub_Group_1 7/31/20 0.3
3 0.2 Group_2 Sub_Group_1 7/31/20 0.4
行排序有点不同,但这是 melt 的工作方式。 如果您对此细节不满意,请根据您的 需要。
【讨论】:
以上是关于pyspark如何使用两个标题行取消转csv [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使 pyspark 和 ML(无 RDD)与大型 csv 一起工作?
为啥有两个选项可以在 PySpark 中读取 CSV 文件?我应该使用哪一个?