我在scipy做一个t测试有问题,这让我慢慢疯了.它应该很容易解决,但我没有做任何工作,我找不到通过广泛搜索找到的解决方案.我在最新的Anaconda发行版上使用Spyder.
具体来说:我想在我从csv文件导入的pandas数据帧中比较两列之间的平均值 - "Trait_A"和"Trait_B".其中一列中的某些值为"Nan"("非数字").独立样本scipy t-test函数的默认设置不适应'NaN'值.但是,将'nan_policy'参数设置为'省略'应该处理此问题.然而,当我这样做时,测试统计数据和p值会以'NaN'的形式返回.当我将所涵盖的值的范围限制为实际数字时,测试工作正常.我的数据和代码如下; 任何人都可以建议我做错了什么?谢谢!
数据:
Trait_A Trait_B
0 1.714286 0.000000
1 4.275862 4.000000
2 0.500000 4.625000
3 1.000000 0.000000
4 1.000000 4.000000
5 1.142857 1.000000
6 2.000000 1.000000
7 9.416667 1.956522
8 2.052632 0.571429
9 2.100000 0.166667
10 0.666667 0.000000
11 2.333333 1.705882
12 2.768145 NaN
13 0.000000 NaN
14 6.333333 NaN
15 0.928571 NaN
Run Code Online (Sandbox Code Playgroud)
我的代码:
import pandas as pd
import scipy.stats as sp
data= pd.read_csv("filepath/Data2.csv")
print (sp.stats.ttest_ind(data['Trait_A'], data['Trait_B'], nan_policy='omit'))
Run Code Online (Sandbox Code Playgroud)
我的结果:
Ttest_indResult(statistic=nan, pvalue=nan)
Run Code Online (Sandbox Code Playgroud) 快速提问:有没有办法在scipy中使用'dropna'和Pearson的r函数?我正在将它与熊猫一起使用,我的一些数据中有漏洞.我知道你曾经能够在较旧版本的scipy中使用Spearman的r来抑制'nan' ,但是现在缺少这个功能.
在我看来,这似乎是一种不妥协,所以我想知道我是否遗漏了一些明显的东西.
我的代码:
for i in range(len(frame3.columns)):
correlation.append(sp.pearsonr(frame3.iloc[ :,i], control['CONTROL']))
Run Code Online (Sandbox Code Playgroud) 我对自己有点恼火,因为我无法理解为什么一个问题的解决方案有效,但另一个没有.就像在,它指出我对(基本)大熊猫的理解不足,这让我很生气!
无论如何,我的问题很简单:我有一个'坏'值列表('bad_index'); 这些对应于数据帧('data_clean1')上的行索引,我想删除相应的行.但是,由于值将随每个新数据集而变化,因此我不想将错误值直接插入代码中.这是我先做的事情:
bad_index = [2, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 29]
for i in bad_index:
dataclean2 = dataclean1.drop([i]).reset_index(level = 0, drop = True)
Run Code Online (Sandbox Code Playgroud)
但这没效果; data_clean2与data_clean1完全相同.我的第二个想法是使用列表推导(如下所示); 这很好.
bad_index = [2, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 29]
data_clean2 = data_clean1.drop([x for x in bad_index]).reset_index(level = 0, drop = True)
Run Code Online (Sandbox Code Playgroud)
现在,为什么列表理解方法有效而不是'for'循环?我已经编写了几个月的代码,我觉得我不应该犯这些错误.
谢谢!
问题是我想获得 pandas 数据框中所有列的修剪平均值(即给定列中的值的平均值,不包括最大值和最小值)。某些列可能具有 nan 值。基本上,我想获得与 pandas.DataFrame.mean 函数完全相同的功能,只不过它是修剪后的平均值。
明显的解决方案是使用 scipy tmean 函数,并迭代 df 列。所以我做了:
import scipy as sp
trim_mean = []
for i in data_clean3.columns:
trim_mean.append(sp.tmean(data_clean3[i]))
Run Code Online (Sandbox Code Playgroud)
这很有效,直到我遇到 nan 值,这导致 tmean 窒息。更糟糕的是,当我删除数据框中的 nan 值时,有些数据集被完全清除,因为它们在每一列中都有一个 nan 值。这意味着当我将所有数据集合并到一个主集中时,主集中的修剪均值应该存在的位置将会出现漏洞。
有谁知道解决这个问题的方法吗?例如,有没有办法让 tmean 表现得像标准 scipy stats 函数并忽略 nan 值?
(请注意,我的代码正在使用有限的硬件计算大型数据集的大量描述性统计数据;高度复杂或低效的解决方法可能不是最佳的。但希望我只是错过了一些简单的东西。)
(编辑:有人在评论中建议(该评论已经消失了?)我应该使用trim_mean scipy函数,它允许您对数据的特定比例进行顶部和尾部。这只是说这个解决方案不起作用对我来说,由于我的数据集大小不等,因此我无法指定在每种情况下都可以删除的固定数据比例;它必须始终只是最大值和最小值。)
我想访问Twitter的存档,而不受速率限制或查询数量的限制。我不介意为此付费,因此我的计划是在Twitter的API平台上注册高级软件包。正如我熟悉Tweepy一样,我希望能够以通常的方式访问API。
但是,似乎我可以在Python中使用高级凭证查询API的唯一方法是通过Python Twitter Search API,它基本上是高级服务的python包装器。问题在于,高级访问的身份验证协议与限速免费访问的身份验证协议不同。这很烦人,因为searchtweets支持Python Twitter Search API 的库似乎相当原始,我几乎对这些文档毫无意义。
有谁知道是否可以使用Tweepy来访问Twitter的高级会员?奇怪的是,更好的工具只能在免费层上使用。
假设我的文本文件包含以下文本:
敏捷的棕狐跳过了懒狗。小洞不补,大洞吃苦。快速的棕色针脚跳过了懒惰的时光。狐狸及时救了一条狗。
我想使用sk-learn的CountVectorizer来获取文件中所有单词的单词计数。(我知道还有其他方法可以执行此操作,但是出于某些原因,我想使用CountVectorizer。)这是我的代码:
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
text = input('Please enter the filepath for the text: ')
text = open(text, 'r', encoding = 'utf-8')
tokens = CountVectorizer(analyzer = 'word', stop_words = 'english')
X = tokens.fit_transform(text)
dictionary = tokens.vocabulary_
Run Code Online (Sandbox Code Playgroud)
除了打电话时dictionary,它给了我错误的计数:
>>> dictionary
{'time': 9, 'dog': 1, 'stitch': 8, 'quick': 6, 'lazy': 5, 'brown': 0, 'saves': 7, 'jumped': 4, 'fox': 3, 'dogs': 2}
Run Code Online (Sandbox Code Playgroud)
有人可以建议我在这里犯下的(毫无疑问的)错误吗?
我有一个问题,我非常感谢你的帮助.
具体来说,我有一个巨大的文本文件; 我需要用字典中的条目替换其中的特定字符串.有用的是,我需要替换的单词以顺序方式命名:'Word1','Word2',......,'Wordn'.
现在,我想写一个循环遍历文件的'for'循环,并且'Wordx'的所有实例都用dictionary [x]替换它.当然,问题在于'Wordx'要求'x'部分作为变量起作用,(据我所知)不能在字符串内完成.
有没有人有解决方法?我试着看正则表达式,但没有发现任何明显的东西(可能是因为我也发现它有点令人困惑).
(注意,当我生成文本文件时,我可以完全控制我想要替换的单词形式:即,它不必是'Word11;它可以是'Wordeleven'或'wordXI'或任何ascii根本.)
编辑:按要求添加更多详细信息:我的文本文件是调查文件背后的javascript导出.原始调查软件只允许我一次输入一个文本提示(而不是从csv输入),但我有几千个文本提示输入(单词).我的计划是手动输入大约100个单词('Word1,...,'Word100'),将调查javascript导出为文本文件,编写脚本以用词典条目替换单词,导入生成的文件,然后加入它们进入一项新的调查.
但是,问题仍然是我是否可以使用字符串的数字部分作为循环的变量