我的问题与此非常相似,但我需要转换整个数据帧而不仅仅是一系列.该to_numeric函数一次只能在一个系列上运行,并且不能替代已弃用的convert_objects命令.有没有办法convert_objects(convert_numeric=True)在新的pandas版本中获得与命令类似的结果?
谢谢MikeMüller的例子.df.apply(pd.to_numeric)如果值都可以转换为整数,则效果很好.如果在我的数据框中我有无法转换为整数的字符串怎么办?例:
df = pd.DataFrame({'ints': ['3', '5'], 'Words': ['Kobe', 'Bryant']})
df.dtypes
Out[59]:
Words object
ints object
dtype: object
Run Code Online (Sandbox Code Playgroud)
然后我可以运行已弃用的函数并获取:
df = df.convert_objects(convert_numeric=True)
df.dtypes
Out[60]:
Words object
ints int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
运行该apply命令会给我带来错误,即使是尝试和处理也是如此.
我一直在这里听到类似的答案,但在使用sklearn和滚动申请时我有一些问题.我正在尝试创建z分数并使用滚动申请进行PCA,但我继续得到'only length-1 arrays can be converted to Python scalars' error.
按照前面的示例,我创建了一个数据帧
from sklearn.preprocessing import StandardScaler
import pandas as pd
import numpy as np
sc=StandardScaler()
tmp=pd.DataFrame(np.random.randn(2000,2)/10000,index=pd.date_range('2001-01-01',periods=2000),columns=['A','B'])
Run Code Online (Sandbox Code Playgroud)
如果我使用rolling命令:
tmp.rolling(window=5,center=False).apply(lambda x: sc.fit_transform(x))
TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
我收到这个错误.然而,我可以创建具有平均值和标准偏差的函数,没有任何问题.
def test(df):
return np.mean(df)
tmp.rolling(window=5,center=False).apply(lambda x: test(x))
Run Code Online (Sandbox Code Playgroud)
我相信当我试图通过z-score的当前值减去平均值时会发生错误.
def test2(df):
return df-np.mean(df)
tmp.rolling(window=5,center=False).apply(lambda x: test2(x))
only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
如何使用sklearn创建自定义滚动功能以首先标准化然后运行PCA?
编辑:我意识到我的问题并不完全清楚所以我会再试一次.我想标准化我的值,然后运行PCA以获得每个因素解释的方差量.无需滚动即可完成此操作非常简单.
testing=sc.fit_transform(tmp)
pca=decomposition.pca.PCA() #run pca
pca.fit(testing)
pca.explained_variance_ratio_
array([ 0.50967441, 0.49032559]) …Run Code Online (Sandbox Code Playgroud) 我有一个简单的偏移问题,我似乎无法在之前的其他帖子中找到答案.我想在几周之内进行分组,但是默认情况下df.groupby(pd.TimeGrouper('1W'))我会在周日开始给我.
比方说,我希望这个groupby在星期二开始.我试图天真地添加pd.DateOffset(days=2)作为一个额外的参数,但似乎没有用.
我在加载rugarch时遇到问题.我可以安装它没问题
install.packages('rugarch')
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试加载它时,我会收到错误
library(rugarch)
Error : .onLoad failed in loadNamespace() for 'rgl', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rgl/libs/rgl.so':
dlopen(/Library/Frameworks/R.framework/Versions/3.2/Resources/library/rgl/libs/rgl.so, 6): Library not loaded: /opt/X11/lib/libGLU.1.dylib
Referenced from: /Library/Frameworks/R.framework/Versions/3.2/Resources/library/rgl/libs/rgl.so
Reason: image not found
Error: package or namespace load failed for ‘rugarch’
Run Code Online (Sandbox Code Playgroud)
我试过升级R,重新安装包都无济于事.这是我的系统设置:
sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.2 (Yosemite)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods
[8] base
other attached …Run Code Online (Sandbox Code Playgroud) 我有一个公司名称列表,我想将其转换为代码。这是用于创建我拥有的名称列表的可重现代码:
companynames=structure(list(V1 = structure(1:41, .Label = c("AETNA INC", "ANTHEM INC",
"APPLE INC", "ASPEN INSURANCE HOLDINGS LTD", "BARRICK GOLD CORP",
"BEST BUY CO INC", "CAREFUSION CORP", "CBS CORP-CLASS B NON VOTING",
"CIGNA CORP", "COMPUTER SCIENCES CORP", "COMPUWARE CORP", "COVENTRY HEALTH CARE INC",
"DELPHI AUTOMOTIVE PLC", "DST SYSTEMS INC", "EINSTEIN NOAH RESTAURANT GRO",
"ENSCO PLC-CL A", "EXPEDIA INC", "FIFTH STREET FINANCE CORP",
"GENERAL MOTORS CO", "GENWORTH FINANCIAL INC-CL A", "GREEN BRICK PARTNERS INC",
"HESS CORP", "HUMANA INC", "HUNTINGTON INGALLS INDUSTRIE", "LEGG MASON …Run Code Online (Sandbox Code Playgroud) 我的问题是类似这样的一个,但也有一些修改.首先,我需要使用python和regex.我的字符串是:'四分和七年前'.我希望每隔6个字符拆分一次,但最后如果字符没有除以6,我想返回空格.
我希望能够输入: 'Four score and seven years ago.'
理想情况下它应该输出: ['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '. ']
我能得到的最接近的是这次尝试,它忽略了我的句号并且没有给我空格
re.findall('.{%s}'%6,'Four score and seven years ago.') #split into strings
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago']
Run Code Online (Sandbox Code Playgroud) 无论如何在Multiindex的列上使用groupby.我知道你可以在行上,并且在这方面有很好的文档.但是我似乎无法在列上进行分组.我唯一的解决方案是转置数据帧.
#generate data (copied from pandas example)
arrays=[['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
Run Code Online (Sandbox Code Playgroud)
现在我将尝试对失败的列进行分组
df.groupby(level=1)
df.groupby(level='first')
Run Code Online (Sandbox Code Playgroud)
但是,使用行进行转置有效
df.T.groupby(level=1)
df.T.groupby(level='first')
Run Code Online (Sandbox Code Playgroud)
那么有没有办法在没有移调的情况下做到这一点?
我一直在 sklearn 中使用来自StratifiedKFold的随机状态变量,但它似乎不是随机的。我相信 settingrandom_state=5应该给我一个不同的测试集然后 setting random_state=4,但情况似乎并非如此。我在下面创建了一些粗略的可重现代码。首先我加载我的数据:
import numpy as np
from sklearn.cross_validation import StratifiedKFold
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
Run Code Online (Sandbox Code Playgroud)
然后我设置random_state=5,我存储最后的值:
skf=StratifiedKFold(n_splits=5,random_state=5)
for (train, test) in skf.split(X,y): full_test_1=test
full_test_1
array([ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 90, 91, 92,
93, 94, 95, 96, 97, 98, 99, 140, 141, 142, 143, 144, 145,
146, 147, 148, 149])
Run Code Online (Sandbox Code Playgroud)
执行相同的程序random_state=4:
skf=StratifiedKFold(n_splits=5,random_state=4)
for (train, …Run Code Online (Sandbox Code Playgroud) 我想创建一个空的多维数组,然后将其绑定到现有的数组.
如果我的数组不为空,我可以将它与abind包绑定:
library(abind)
c=matrix(0,2,3)
test=array(0,c(2,3,1))
test2=abind(test,c,along=3)
test2 #exactly what I expected
, , 1
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 2
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
Run Code Online (Sandbox Code Playgroud)
现在我想做同样的事情,除了两个完整的数组,我希望其中一个是空的.如果我有角色会发生什么:
test3=character() #this is empty
test3=c(test3,'hi') #I bind the word hi to it
test3
[1] "hi"
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用数组,这不完全有效:
empty=array()
abind(empty,test,along=3)
Error in abind(empty, test, along = 3) :
'X1' does not fit: should have `length(dim())'=3 or 2
Run Code Online (Sandbox Code Playgroud)
所以我假设array()你不是如何创建一个空的多维数组. …
我知道如果我有原始数据,我可以创建一个距离矩阵,但是对于这个问题,我有一个距离矩阵,我希望能够在 R 中运行命令,比如 hclust。下面是我在 R 中想要的距离矩阵。我不确定以矩阵形式存储这些数据是否有效,因为我将无法在矩阵上运行 hclust。
我尝试使用as.dist函数创建它但无济于事。我的错误代码:
test=as.dist(c(.76,2.97,4.88,3.86,.8,4.17,1.96,.21,1.51,.51), diag = FALSE, upper = FALSE)
test
1 2 3 4 5 6 7 8 9
2 2.97
3 4.88 2.97
4 3.86 4.88 0.51
5 0.80 3.86 2.97 0.21
6 4.17 0.80 4.88 1.51 0.80
7 1.96 4.17 3.86 0.51 4.17 0.51
8 0.21 1.96 0.80 2.97 1.96 2.97 0.80
9 1.51 0.21 4.17 4.88 0.21 4.88 4.17 0.21
10 0.51 1.51 1.96 3.86 1.51 3.86 1.96 1.51 …Run Code Online (Sandbox Code Playgroud) 我的问题是,类似这样的一个,但是我很感兴趣,返回所有的其它输出,而不仅仅是系数。这是示例代码,使我的问题更清楚。
data=as.data.frame(matrix(rnorm(50*50),50,50))
summary(lm(data[,1]~.-data[,1],data=data))
Run Code Online (Sandbox Code Playgroud)
我只想输出说前 5 个系数。我知道我可以用 来做到这一点
summary(lm(data[,1]~.-data[,1],data=data))$coeff[1:5,],但这会摆脱我想要的所有其他输出。我也知道我可以单独获得每个输出,我只是想知道是否有一种简洁的方式来编写单行并删除我不想报告的变量。