我有以下 data.frame,“子集”
Time A B C
2016-10-07 06:16:46 NA NA 41
2016-10-07 06:26:27 40 39 42
2016-10-07 06:38:23 NA 40 NA
2016-10-07 06:41:06 42 42 44
2016-10-07 06:41:06 NA 42 44
2016-10-07 06:41:06 NA 42 44
2016-10-07 06:41:07 44 43 48
2016-10-07 06:41:41 NA 43 48
2016-10-07 06:42:44 45 42 48
2016-10-07 06:48:40 46 45 48
Run Code Online (Sandbox Code Playgroud)
我想要一个图,其中“时间”是x轴,“A”是一条线,“B”和“C”是点。
然而,当我绘制此图时,“A”出现的唯一一条线是连接最后 2 个点(45 和 46)的线,因为这是“A”中唯一的 2 个连续值。该图忽略“A”值之间的 NA,而不是通过 NA 连接这些值的线。为此,我使用以下代码:
plot(subset$Time,subset$A,type="l",ylim=c(min(subset$B,na.rm=TRUE)-5,max(subset$C,na.rm=TRUE)+5),xlim=c(as.POSIXct(min(subset$Time)),as.POSIXct(max(subset$Time))))
lines(subset$Time,subset$B,type="p",col=27)
lines(subset$Time,subset$C,type="p",col=134)
Run Code Online (Sandbox Code Playgroud)
我尝试过诸如 na.omit() 或 na.approx() 之类的解决方案,但是这些解决方案似乎只有在我在独立图中单独绘制“A”时才有效,它们似乎不能与“Time”一起使用”以及“B”和“C”都在同一个情节中。
我正在运行 Python 3.5 和 Pandas v 0.19.2。我有一个如下所示的数据框。向前填充缺失值非常简单。
import pandas as pd
import numpy as np
d = {'A': np.array([10, np.nan, np.nan, -3, np.nan, 4, np.nan, 0]),
'B': np.array([np.nan, np.nan, 5, -3, np.nan, np.nan, 0, np.nan ])}
df = pd.DataFrame(d)
df_filled = df.fillna(axis='index', method='ffill')
print(df_filled)
Out[8]:
A B
0 10.0 NaN
1 10.0 NaN
2 10.0 5.0
3 -3.0 -3.0
4 -3.0 -3.0
5 4.0 -3.0
6 4.0 0.0
7 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
我的问题是:实现衰减前向填充的最佳方法是什么?我理解pd.ffill()并且pd.fillna()不支持这一点。例如,我之后的输出如下(与上面的常规填充相反),其中每个周期的值减半:
Out[5]:
A …Run Code Online (Sandbox Code Playgroud) 我正在使用 ggplot2 创建线图,但缺少用 NaN 表示的数据。我的线图当前没有在缺失值之间添加任何线。但是,我想用虚线连接缺失的数据,而所有已知的数据用实线连接。
这是我当前绘图的代码,其中包含我的数据框的一小部分和下面的绘图图像。
#make ggplots for all data sets
Q4_plot <- ggplot(data = Q4, mapping = aes(x = Year, y = Q4)) +
geom_line() +
geom_point() +
labs(title = "Quarter 4 Anamolies of C. finmarchicus Population") +
ylab("Anamoly") +
scale_y_discrete(lim = c(-1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5))
#subset of data frame
> dput(Q4)
structure(list(Year = c(1980, 1981, 1982, 1983, 1984, 1985, 1986,
1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, …Run Code Online (Sandbox Code Playgroud) 简而言之:如何忽略pd.NaT列表中放入的内容max?
import datetime
max([pd.NaT, datetime.datetime(1900, 1, 1), datetime.datetime(2000, 1, 1)])
Run Code Online (Sandbox Code Playgroud)
预期输出是Timestamp('2000-01-01 00:00:00'). 即使这个问题似乎是一个标准问题,除了这个非Pythonic的问题之外我找不到解决方案:
max(pd.DataFrame([pd.NaT, datetime.datetime(1900, 1, 1), datetime.datetime(2000, 1, 1)]).dropna()[0])
Run Code Online (Sandbox Code Playgroud) 我有一个包含多列的数据框 df 。
其中两列( AGE 和 SALARY 列)的类型为 double 。
我想用 0 替换 AGE 列的缺失值,
用“未找到”替换 SALARY 列的缺失值。
最有效的方法是什么?
replace_na(df, list(AGE=0, SALARY="not found"))
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in `stop_vctrs()`:
! Can't convert `replace$SALARY` <character> to match type of `data$SALARY` <double>.
Backtrace:
1. tidyr::replace_na(df, list(AGE= 0, SALARY= "not found"))
2. tidyr:::replace_na.data.frame(df, list(AGE= 0, SALARY= "not found"))
3. vctrs::vec_assign(...)
4. vctrs `<fn>`()
5. vctrs::vec_default_cast(...)
6. vctrs::stop_incompatible_cast(...)
7. vctrs::stop_incompatible_type(...)
8. vctrs:::stop_incompatible(...)
9. vctrs:::stop_vctrs(...)
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的数据集的来源:https://drive.google.com/file/d/1cKxzNrnIMq4RxdMcBz3nlr7YtYaPhn5_/view ?usp=sharing
我有一个数据帧数据透视表,有 2 个索引级别:月份和评级。评级应为 1、2、3(不要与列 1、2、3 混淆)。我发现有几个月,评级可能会丢失。例如,(人口和 2021-10)仅具有评级 1,2。我需要每个月都有收视率1、2、3。所以我需要将缺失的评级索引填为0。
tbl = pd.pivot_table(self.df, values=['ID'], index=['month', 'risk'],
columns=["Factor"], aggfunc='count', fill_value=0)
tbl = tbl.droplevel(None, axis=1).rename_axis(None, axis=1).rename_axis(index={'month': None,
'Risk': 'Client Risk Rating'})
# show Low for rating 1, Moderate for rating 2, Potential High for rating 3
rating = {1: 'Low',
2: 'Moderate',
3: 'Potential High'
}
pop = {'N': 'Refreshed Clients', 'Y': 'Population'}
tbl.rename(index={**rating,**pop}, inplace=True)
tbl = tbl.applymap(lambda x: x.replace(',', '')).astype(np.int64)
tbl = tbl.div(tbl.sum(axis=1), axis=0)
# client risk rating may be missing (e.g., only …Run Code Online (Sandbox Code Playgroud) 我想var1:var6仅将列中缺失值少于 2 个的行的列中的缺失值替换为 0 var1:var6。然后我想重新计算总和列(我可以很高兴地rowwise()按照我的代表使用它)。
across()我已经使用, 或rowwise()尝试了一些方法,c_across()但正在努力寻找解决方案。
library(tidyverse)\n\n# Generate data\nset.seed(40)\ndat <- tibble(\n id = 1:6,\n var1 = sample(c(0:4, NA), 6, replace = TRUE),\n var2 = sample(c(0:4, NA), 6, replace = TRUE),\n var3 = sample(c(0:4, NA), 6, replace = TRUE),\n var4 = sample(c(0:4, NA), 6, replace = TRUE),\n var5 = sample(c(0:4, NA), 6, replace = TRUE),\n var6 = sample(c(0:4, NA), 6, replace = TRUE),\n)\n\ndat %>%\n rowwise() %>%\n mutate(sum = …Run Code Online (Sandbox Code Playgroud) 我有一个数据框R如下:
gen pos count
A 1 10
A 2 20
A 3 15
A 4
...
B 1 50
B 2 30
B 3
B 4 40
...
Run Code Online (Sandbox Code Playgroud)
数据框包含~30000行.count在~300行中故意丢失值.我将这些数据绘制成:
ggplot(data=d, aes(x=pos, y=count, group=gen, colour=gen)) + geom_line()
Run Code Online (Sandbox Code Playgroud)
图中缺少缺少的数据点,这就是我想要的.我很满意这个情节.
但是,ggplot返回以下警告:
Removed 2 rows containing missing values (geom_path).
Run Code Online (Sandbox Code Playgroud)
如果有大约300个缺失值(for count;没有缺失值gen或者pos),为什么只ggplot报告2?
如何在熊猫数据框中随机丢失某些值,如在熊猫数据框中随机插入NA的值, 但确保没有行完全设置缺失值?
编辑:对不起,没有说明这再次明确(它是在引用虽然这个问题我):我需要能够指定多少百分比,例如10%的的细胞应该是NaN(或者说,由于靠近(例如,使用现有数据帧的大小可以达到10%),这与独立清除单元格(每单元边际概率为10%)相反。
我是使用R的新手,正在尝试构建决策树。我已经使用了包party的ctree和rpart为rpart包。
但是,由于我需要对模型进行交叉验证,因此我开始使用该caret包,因为我可以通过使用函数`train()和我要使用的方法来做到这一点。
library(caret)
cvCtrl <- trainControl(method = "repeatedcv", repeats = 2,
classProbs = TRUE)
ctree.installed<- train(TARGET ~ OPENING_BALANCE+ MONTHS_SINCE_EXPEDITION+
RS_DESC+SAP_STATUS+ ACTIVATION_STATUS+ ROTUL_STATUS+
SIM_STATUS+ RATE_PLAN_SEGMENT_NORM,
data=trainSet,
method = "ctree",
trControl = cvCtrl)
Run Code Online (Sandbox Code Playgroud)
但是,我的变量OPENING_BALANCE并MONTHS_SINCE_EXPEDITION缺少一些值,因此该函数无法正常工作。我不明白为什么会这样,因为我正在尝试构建一棵树。当我使用其他软件包时,不会发生此问题。
这是错误:
Error in na.fail.default(list(TARGET = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, :
missing values in object
Run Code Online (Sandbox Code Playgroud)
我不想使用,na.action=pass因为我真的不想丢弃这些观察结果。
难道我做错了什么?为什么会这样呢?您对此有什么建议吗?