字符数超过单元格限制或存储可变长度列表的问题
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 年)。
问题:
我有在 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
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 年)。