python脚本系列-两列数据互相转化

简介: python脚本系列-两列数据互相转化

python脚本系列-两列数据互相转化


数据分析中常常会有这样的转换需求

image.png

脚本如下:

import sys
infile = open(sys.argv[1],'r')
res = open(sys.argv[2],'w')
result = {}
for line in infile:
    line = line.strip().split('\t')
    if len(line) < 2: continue
    accession = line[0]
    go = line[1]
    result.setdefault(accession,set()).add(go) #这样好处是不会有重复值
    #这里可以换成列表的形式acc2go.setdefault(accession,[]).append(go)
for acc,goi in acc2go.items():
#增添第二列为重复的数量
    res.write("%s\t%d\t%s\n"%(acc,len(goi),",".join(goi)))
res.close()

image.png

另一种

import sys
num = {}
old = open(sys.argv[1], 'r')
for line in old:
    line = line.strip().split('   ')
    if line[0] not in num:
        num[line[0]] = line[1]
    else:
        num[line[0]] += f',{line[1]}'
old.close()
new = open(sys.argv[2], 'w')
for key,value in num.items():
    print(f'{key}\t{value}', file = new)
new.close()

OK,换个思路,此时我们想把数据从右边的格式转换为左边的格式怎么做呢?

image.png

第一种

import sys
def Trans_file(f1,f2):
    for i in f1.readlines():
        j = i.split('   ')
        for k in j[1].split(','):
            m = j[0] + '\t' + k
            if(m[-1] != '\n'):
                m = m + '\n'
            print(m)
            f2.write(m)
f1 = open(sys.argv[1],'r')
f2 = open(sys.argv[2],'w')
Trans_file(f1,f2)
f1.close()
f2.close()

第二种

import sys
dict = {}
final = open(sys.argv[2],'w')
with open(sys.argv[1],'r') as p:
    for line in p:
        line = line.strip().split('   ')
        gene = line[0]
        dict[gene] = line[1]
for key,value in dict.items():
    for i in value.split(','):
        print(f'{key}\t{i}',file=final)
final.close()

嗯,大功告成~~

另外,第一种情况有时候我们想要进行重复值求和时用python实现一下,稍微改动下语句即可(虽然这种处理在R中有一堆的函数可以处理):

num = {}
old = open(sys.argv[1], 'r')
for line in old:
    line = line.strip().split('   ')
    if line[0] not in num:
        num[line[0]] = float(line[1])
    else:
        num[line[0]] += float(line[1])
old.close()
new = open(sys.argv[2], 'w')
for key,value in num.items():
    print(f'{key}\t{value}', file = new)
new.close()


相关文章
|
19天前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
116 68
|
3天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
13 2
|
23天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
5天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
14 3
|
7天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
16 1
|
10天前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
15 3
|
8天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
9天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
10天前
|
数据采集 JSON 数据安全/隐私保护
Python常用脚本集锦
Python常用脚本集锦
13 2
|
11天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。