python-2.7 - 让 scipy 接受丢失的数据
问题描述
我需要在 scipy pearsonr 函数中包含缺失的数据。问题是,如果我从一个文件中读取它,例如“NA”,那么我无法将它转换为浮点数,以便 numpy 接受它。如果我用 numpy 读取它,那么具有 'NA' 值的灵活数组类型不能与 'dropna' 或类似的一起使用。我怎样才能让 scipy 接受丢失的数据?我已阅读有关数据掩码的信息,但我不明白如何在代码中使用它。
谢谢,
#!/usr/bin/env python
import sys
import scipy.stats as sp
import numpy as np
f1=open(sys.argv[1],'r')
f2=open(sys.argv[2],'r')
g=open(sys.argv[3],'w')
f1.readline()
otus=[]
metanames=[]
result={}
for i in f1:
k1=i.split("\t")
k1[-1]=k1[-1].rstrip("\n")
otu=k1[0]
f2.seek(0)
result[otu]=[]
f2.readline()
for j in f2:
k2=j.split("\t")
k2[-1]=k2[-1].rstrip("\n")
if k2[0] not in metanames:
metanames.append(k2[0])
x=np.asarray(k1[1:])
y=np.asarray(k2[1:])
corr = sp.pearsonr(x, y)
result[otu].append(str(corr))
g.write("\t"+"\t".join(str(p) for p in metanames)+"\n")
for i in result.keys():
g.write(i+"\t"+"\t".join(str(p) for p in result[i][0])+"\n")
TypeError:无法使用灵活类型执行归约
解决方案
好的,所以我完全避免使用 numpy,而只是从两个数组中手动删除了 'nan' 和相应的值。
S。
f1=open(sys.argv[1],'r')
f2=open(sys.argv[2],'r')
g=open(sys.argv[3],'w')
f1.readline()
otus=[]
metanames=[]
result={}
for i in f1:
k1=i.split("\t")
k1[-1]=k1[-1].rstrip("\n")
otu=k1[0]
if otu not in otus:
otus.append(otu)
f2.seek(0)
result[otu]=[]
f2.readline()
for j in f2:
k2=j.split("\t")
k2[-1]=k2[-1].rstrip("\n")
if k2[0] not in metanames:
metanames.append(k2[0])
x=k1[1:]
y=k2[1:]
c=-1
while c< len(x):
if x[c]=='NaN' or y[c]=='NaN':
del x[c]
del y[c]
else:
x[c]=float(x[c])
y[c]=float(y[c])
c=c+1
corr = sp.pearsonr(x, y)
result[otu].append(corr[0])
g.write("\t"+"\t".join(str(p) for p in metanames)+"\n")
for i in result.keys():
g.write(i)
for z in result[i]:
g.write("\t"+str(z))
g.write("\n")
推荐阅读
- regex - 正则表达式捕获两个字符串之间的所有内容,但避免捕获逗号
- windows - 如何在多显示器设置中让无边框子窗口重新缩放到当前屏幕?
- java - Jdbi 的声明式 API 性能对 Spring MVC Web 服务的影响
- neo4j - Neo4j 启动麻烦
- java - Java Stream API - 自定义无限源
- spring-batch - 如何在spring批处理中从多个相关数据库表中读取复杂数据
- sql - 无法解决 concat 操作中“SQL_Latin1_General_CP1_CI_AS”和“Indic_General_90_BIN”之间的排序规则冲突
- elasticsearch - 如何在聚合期间过滤掉某些值?
- r - 如何在 Shiny 中不同步地渲染两个 uiOutput?
- r - 使用 limma 从 vennDiagram 图中删除框框