我有一个包含以下列的数据框:
duration, cost, channel
2 180 TV1
1 200 TV2
2 300 TV3
1 nan TV1
2 nan TV2
2 nan TV3
2 nan TV1
1 40 TV2
1 nan TV3
Run Code Online (Sandbox Code Playgroud)
一些成本值是nans,为了填补它们,我需要执行以下操作:
示例:TV2频道,我们有3个条目,其中一个条目具有空成本.所以我需要做以下事情:
average = 200+40/3 = 80
if duration = 1, cost = 80 * 1.5 = 120
duration, cost, channel
2 180 TV1
1 120 TV2
2 300 TV3
1 nan TV1
2 80 TV2
2 nan TV3
2 nan TV1 …Run Code Online (Sandbox Code Playgroud) 我一直在努力让我的PCA工作,我认为这是因为我的数据集中没有值.但我不知道如何解决这个问题.
第一个问题是,零值不是缺失值(它们是某个部门没有工作的区域),所以我应该把它们留在那里.我感到不舒服的是,他们可能被排除在外,因为他们是零.
其次,即使我尝试删除所有丢失的数据,我仍然会得到相同的错误消息.
从以下代码开始,我收到以下错误消息:
urban.pca.cov <- princomp(urban.cov, cor-T)
Error in cov.wt(z) : 'x' must contain finite values only
Run Code Online (Sandbox Code Playgroud)
另外,我可以这样做:
urban.cut<- na.omit(urban.cut)
> sum(is.na(urban.cut))
[1] 0
Run Code Online (Sandbox Code Playgroud)
然后再次运行它并得到相同的问题.
urban.pca.cov <- princomp(urban.cov, cor-T)
Error in cov.wt(z) : 'x' must contain finite values only
Run Code Online (Sandbox Code Playgroud)
这是一个缺少数据的问题吗?我已根据此PCA教程对所有变量进行了日志转换.这是我的数据结构.
> str(urban.cut)
'data.frame': 5490 obs. of 13 variables:
$ median.lt : num 2.45 2.57 2.53 2.6 2.31 ...
$ p.nga.lt : num 0.547 4.587 4.529 4.605 4.564 ...
$ p.mbps2.lt : num 1.66 4.17 4 3.9 4.2 …Run Code Online (Sandbox Code Playgroud) 我正在使用类似于以下摘录的数据框.
sample.df
Obs Var1 Var2 Var3
A0001 21 21 21
A0002 21 78 321
A0003 32 98 87
A0004 21 12 54
A0005 21 13 45
A0006 21 87 45
B0007 84 NA 45
B0008 21 NA 98
B0009 2 NA 45
B0010 12 NA 45
Run Code Online (Sandbox Code Playgroud)
我想删除缺少某些变量百分比的列,例如80%.我试过下面的代码:
sample.df.cln <- apply(sample.df, 2, function(x) {
if (sum(is.na(x)) / nrow(x) > 0.8) {
x <- NULL
}
})
Run Code Online (Sandbox Code Playgroud)
但它返回了以下错误:
Error in if (sum(is.na(x))/nrow(x) > 0.8) { : argument is of length zero
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何帮助.我还认为将代码封装在函数中是有益的,因此它可以应用于不同的数据帧.
我有一个变量有三个值,NA,Yes,MayBe.
当我在该变量上使用level和class函数时,我得到了这些值
> levels(Data1$Case)
"Yes" "May Be"
> class(Data1$Case)
"factor"
Run Code Online (Sandbox Code Playgroud)
我试图用No替换NA值,所以我使用此代码
Data1$Col1[is.na(Data1$Col1)]= "No"
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,
In `[<-.factor`(`*tmp*`, is.na(Data1$Col1), value = c(NA, :
invalid factor level, NA generated
Run Code Online (Sandbox Code Playgroud)
我写了一个ifelse声明来取代NA,
Data1$Col1=ifelse(is.na(Data1$Col1_ == 'TRUE'), "No",Data1$Col1)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我正在寻找一些有效的方法来取代NA.
我想要一个只有相关系数大于0.2的矩阵.我提出了以下解决方案.
mts.data <- ts(data.frame(a=arima.sim(model=list(1,0,0), n=10),
b=arima.sim(model=list(1,0,1), n=10), c=arima.sim(model=list(1,0,0),
n=10), d=arima.sim(model=list(1,0,2), n=10),
e=arima.sim(model=list(2,0,1), n=10)), start=c(2007,1), frequency=12)
critcor <- function(x) {
crit.mat <- matrix(0, nrow=ncol(x), ncol=ncol(x))
for(j in 1:ncol(x)) {
for(i in 1:ncol(x)) {
if(abs(cor(x[,i], x[,j])) > 0.2) {
crit.mat[i,j] <- cor(x[,i], x[,j])
}
}
}
return(crit.mat)
}
Run Code Online (Sandbox Code Playgroud)
这很好用.不幸的是,我的数据集包含缺失值.
mts.data[1:3, 4] <- NA
mts.data[9:10, 5] <- NA
Run Code Online (Sandbox Code Playgroud)
当我运行我的功能时,我收到了一个错误.
critcor(mts.data)
# Error in if (abs(cor(x[, i], x[, j])) > 0.2) { :
# missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
我现在正在浏览互联网几个小时,我完全不知道如何解决这个问题.如果由于缺少值而无法进行相关,我希望我的函数只打印0.
我想创建一个表来获取标签(用于行和列)形成一个源和来自另一个源的数据.
我有以下数据:
var1_labels = c('A', 'B', 'C')
var2_labels = c(1, 2, 3)
var1_data = c('A', 'A', 'A', 'A', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C')
var2_data = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个包含每个元素计数的表,所以我运行:
table(var1_data, var2_data)
Run Code Online (Sandbox Code Playgroud)
我得到:
Run Code Online (Sandbox Code Playgroud)var2_data var1_data 1 2 A 5 0 C 4 11
但我想得到的是:
Run Code Online (Sandbox Code Playgroud)var2_data var1_data 1 2 3 A 5 0 0 …
我有一个excel文件,其中列出了篮球队和每支球队的球员.新团队的第一行说明了第0列中的团队名称和第1列中该团队中的玩家.下一行在第1列中只有该团队中的玩家(第0列中没有任何内容,因为团队是从最后一个暗示的)陈述的团队).每个团队都会重复这一过程.
Warriors Stephen Curry
- Klay Thompson
- Kevin Durant
Clippers Chris Paul
- Blake Griffen
- JJ Redick
Raptors Kyle Lowry
- Demar Derozan
Run Code Online (Sandbox Code Playgroud)
我将数据导入到pandas数据框中并计算每个团队中的玩家数量.
import pandas as pd
df = read_excel('data.xlsx')
print(df)
Team Player
0 Warriors Stephen Curry
1 NaN Klay Thompson
2 NaN Kevin Durant
3 Clippers Chris Paul
4 NaN Blake Griffen
5 NaN JJ Redick
6 Raptors Kyle Lowry
7 NaN Demar Derozan
Run Code Online (Sandbox Code Playgroud)
无论如何我可以NaN用适当的团队名称替换(我知道我只需要填写excel文件中的空白点,但如果我在导入或通过pandas处理它,它看起来更清晰).我想我需要遍历数据框,如果不是,则存储团队名称,NaN并替换NaN为当前存储的团队名称,直到新团队出现.
如果你不了解篮球,我的数据框应该看起来像这样说完了:
Team Player
0 Warriors …Run Code Online (Sandbox Code Playgroud) 我遇到一个问题,当我在Elasticsearch中使用match_phrase_prefix查询时,它没有返回我期望的所有结果,尤其是当查询是一个单词后跟一个字母时。
进行以下索引映射(这是保护敏感数据的人为示例):
http://localhost:9200/test/drinks/_mapping
Run Code Online (Sandbox Code Playgroud)
返回:
{
"test": {
"mappings": {
"drinks": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在数百万其他记录中,还有:
{
"_index": "test",
"_type": "drinks",
"_id": "2",
"_score": 1,
"_source": {
"name": "Johnnie Walker Black Label"
}
},
{
"_index": "test",
"_type": "drinks",
"_id": "1",
"_score": 1,
"_source": {
"name": "Johnnie Walker Blue Label"
}
}
Run Code Online (Sandbox Code Playgroud)
以下查询,是一个单词,后跟两个字母:
POST http://localhost:9200/test/drinks/_search
{
"query": {
"match_phrase_prefix" : {
"name" : "Walker Bl"
}
}
}
Run Code Online (Sandbox Code Playgroud)
返回此:
{
"took": 1, …Run Code Online (Sandbox Code Playgroud) 我有一个整数矩阵,填充 nans
M=
1 2 2 3 4 4
2 2 2 3 4 NaN
2 2 2 3 4 NaN
2 2 2 3 4 NaN
2 2 2 3 4 NaN
2 2 2 3 4 NaN
Run Code Online (Sandbox Code Playgroud)
我正在使用imagesc绘图
imagesc(M)
Run Code Online (Sandbox Code Playgroud)
但是,如果我以这种方式绘制它,NaN并1显示相同的颜色,这是令人困惑的.
I'm fairly new to Julia and as a Matlab/R User I find it, for the most part, really nice to work with.
However, I'm a little confused by the missing values and how to work with them.
Let's say I have a vector:
a=[missing -1 2 3 -12] #Julia
a=[NaN -1 2 3 -12] #Matlab
Run Code Online (Sandbox Code Playgroud)
In Matlab I would just do the following to find the values below 0
a(a<0)
Run Code Online (Sandbox Code Playgroud)
which gives me
-1 -12
Run Code Online (Sandbox Code Playgroud)
The same unfortunately doesn't work …