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

Problem either with number of characters exceeding cell limit, or storing lists of variable length

问题:

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

我正在使用 pandas 数据框,然后转换为 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')

Link 到数据(任意一个):

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

将您的 data 变量创建为字典 您可以使用 json.dump refer here

将词典保存到 json 文件
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)

IIUC 您需要在每个组织中找到的基因名称列表。这会将这些列表作为列写入 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(Data - External data, From text),否则无法将它们分成Excel列在一个运行(至少在 Excel 2010 年)。