python - 在python中将多列转换为行
问题描述
我有一个重度嵌套的 json 文件,我已将其展平并获得如下输出,其中一列中的行带有附加的数值。有什么方法可以删除它并将它们按行排列,如输出
输入文件中所示
102_ip_addr, 102_ip_family, 102_ip_mask_addr, 102_email, 102_failed_attempts,103_ip_addr, 103_ip_family, 103_ip_mask_addr, 103_email, 103_failed_attempts,
3705824725, 2, 4294967295, abc@xyz.com, 0,3705824825, 4, 4294967625, sdf@xyz.com, 0
输出:
ip_addr, ip_family, ip_mask_addr, email, failed_attempts
3705824725, 2, 4294967295, abc@xyz.com, 0
3705824825, 4, 4294967625, sdf@xyz.com, 0
解决方案
如果每个新行都有固定宽度 5 ,您可以使用reshape
pd.DataFrame(df.values.reshape(-1,5),columns=['addr','family','mask_addr','email','attempts'])
Out[580]:
addr family mask_addr email attempts
0 3705824725 2 4294967295 abc@xyz.com 0
1 3705824825 4 4294967625 sdf@xyz.com 0
更新
df.columns=df.columns.str.split('_',1).str[1]
df.melt().assign(newrow=lambda x : x.groupby(x['variable']).cumcount() ).pivot('newrow','variable','value')
Out[596]:
variable email failed_attempts ip_addr ip_family ip_mask_addr
newrow
0 abc@xyz.com 0 3705824725 2 4294967295
1 sdf@xyz.com 0 3705824825 4 4294967625
推荐阅读
- html - Colorbox 插件在加载和运行后不允许点击父网页
- mysql - 如何根据 IN() 列表顺序对 SELECT 结果进行排序?
- python - 从 python 文件调用模块 yaml 时,PyYAML-3.10 包中包含的文件中的编译错误
- sql - 如何在 SQL 查询中添加 AND 条件
- amazon-web-services - 使用 Terraform 将文件上传到 AWS Secrets Manager
- reactjs - SCSS 模块未在 NextJS 中加载
- php - 如何存储多时区系统日期?
- java - SpringBoot - 当某些条件具有真值时,如何避免“创建名称为'entityManagerFactory'的bean时出错......”
- node.js - 使用带有 MongoDB 的 Express 应用程序在客户端浏览器而不是服务器上执行“创建”功能
- phpmyadmin - 使用 ubuntu 20.04、php8.0 在 PhpMyAdmin 中出现“弃用通知”错误