字符数超过单元格限制或存储可变长度列表时出现问题

2024-04-26 02:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是:

我有53种不同组织中表达的基因列表。最初,这些数据存储在一个最大的基因数组中,其中“NaN”没有表达。我正在尝试为每一个刚刚表达了基因的组织创建新的列表,因为每次我运行脚本时搜索这个数组是非常低效的。我有一个代码,可以根据需要找到每个组织的基因,但我不知道如何存储输出。你知道吗

我使用熊猫数据帧,然后转换成csv。但这不接受不同长度的列表,除非我将此列表作为单个项目。然而,当我将数据帧保存到csv时,它试图将这个很长的列表(一个组织的所有基因表达)压缩到一个细胞中。我得到一个字符串长度超过excel字符/单元格限制的错误。你知道吗

因此,我需要一种方法来处理这个限制,或者以一种不同的方式来处理我的列表。我宁愿所有列表都有一个文件。你知道吗

我的代码:

import csv
import pandas as pd
import math
import numpy as np


#Import list of tissues:
df = pd.read_csv(r'E-MTAB-5214-query-results.tsv', skiprows = [0,1,2,3], sep='\t')
tissuedict=df.to_dict()
tissuelist = list(tissuedict.keys())[2:]

all_genes = [gene for key,gene in tissuedict['Gene Name'].items()]

data = []


for tissue in tissuelist:

    #Create array to keep track of the protein mRnaS in tissue that are not present in the network
    #initiate with first tissue, protein

    nanInd = [key for key,value in tissuedict[tissue].items() if math.isnan(value)]

    tissueExpression = np.delete(all_genes, nanInd)

    datatis = [tissue, tissueExpression.tolist()]

    print(datatis)

    data.append(datatis)


print(data)


df = pd.DataFrame(data)

df.to_csv(r'tissue_expression_data.csv')

链接到数据(任意一个):

https://github.com/joanna-lada/gene_data/blob/master/E-MTAB-5214-query-results.tsv

https://raw.githubusercontent.com/joanna-lada/gene_data/master/E-MTAB-5214-query-results.tsv


Tags: csv数据inimportdf列表data基因
2条回答

你需要在每个组织中找到的基因名的列表。这会将这些列表作为列写入csv:

import pandas as pd

df = pd.read_csv('E-MTAB-5214-query-results.tsv', skiprows = [0,1,2,3], sep='\t')
df = df.drop(columns='Gene ID').set_index('Gene Name')

res = pd.DataFrame()
for c in df.columns:
    res = pd.concat([res, pd.Series(df[c].dropna().index, name=c)], axis=1)

res.to_csv('E-MTAB-5214-query-results.csv', index=False)

(将它们写成行会更容易,但Excel无法导入这么多列) 不要直接在Excel中打开csv,而是使用空白工作表并导入csv(数据-外部数据,来自文本),否则不能在一次运行中将它们分离到Excel列中(至少在Excel 2010中是这样)。你知道吗

enter image description here

创建data变量作为字典 您可以使用json.dump文件refer here

import json

data = {}
for tissue in tissuelist:
    nanInd = [key for key,value in tissuedict[tissue].items() if math.isnan(value)]
    tissueExpression = np.delete(all_genes, nanInd)
    data[tissue] =  tissueExpression.tolist()

with open('filename.json', 'w') as fp:
    json.dump(data, fp)

相关问题 更多 >