我有一个数据框,有些列有NA
值.
如何NA
用零替换这些值?
这应该是直截了当的,但我发现的最接近的是这篇文章: 熊猫:填写组内的缺失值,我仍然无法解决我的问题....
假设我有以下数据帧
df = pd.DataFrame({'value': [1, np.nan, np.nan, 2, 3, 1, 3, np.nan, 3], 'name': ['A','A', 'B','B','B','B', 'C','C','C']})
name value
0 A 1
1 A NaN
2 B NaN
3 B 2
4 B 3
5 B 1
6 C 3
7 C NaN
8 C 3
Run Code Online (Sandbox Code Playgroud)
并且我想在每个"名称"组中填写"NaN",其中包含平均值
name value
0 A 1
1 A 1
2 B 2
3 B 2
4 B 3
5 B 1
6 C 3
7 C 3
8 C 3
Run Code Online (Sandbox Code Playgroud)
我不确定去哪里: …
我有一些文本类型的pandas数据.这些文本列中包含一些NaN值.我想要做的就是通过sklearn.preprocessing.Imputer
(以最常见的值取代NaN )来归咎于那些NaN .问题在于实施.假设有一个包含30列的Pandas数据帧df,其中10列具有分类性质.一旦我跑:
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)
imp.fit(df)
Run Code Online (Sandbox Code Playgroud)
Python生成一个error: 'could not convert string to float: 'run1''
,其中'run1'是来自第一列的普通(非缺失)值,带有分类数据.
任何帮助都会非常受欢迎
我不知道如何循环每列以用列均值替换NA值.当我尝试使用以下代码替换一列时,它运行良好.
Column1[is.na(Column1)] <- round(mean(Column1, na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
循环列的代码不起作用:
for(i in 1:ncol(data)){
data[i][is.na(data[i])] <- round(mean(data[i], na.rm = TRUE))
}
Run Code Online (Sandbox Code Playgroud)
值不会被替换.有人可以帮我这个吗?
我有类似的问题这一个,但我的数据集是有点大:50列与1列UID等栏目,无论是携带TRUE
还是NA
,我想改变一切NA
到FALSE
,但我不希望使用显式循环.
可以plyr
做到的伎俩?谢谢.
感谢您的快速回复,但如果我的数据集如下所示:
df <- data.frame(
id = c(rep(1:19),NA),
x1 = sample(c(NA,TRUE), 20, replace = TRUE),
x2 = sample(c(NA,TRUE), 20, replace = TRUE)
)
Run Code Online (Sandbox Code Playgroud)
我只想要X1
和X2
被处理,如何做到这一点?
862 2006-05-19 6.241603 5.774208
863 2006-05-20 NA NA
864 2006-05-21 NA NA
865 2006-05-22 6.383929 5.906426
866 2006-05-23 6.782068 6.268758
867 2006-05-24 6.534616 6.013767
868 2006-05-25 6.370312 5.856366
869 2006-05-26 6.225175 5.781617
870 2006-05-27 NA NA
Run Code Online (Sandbox Code Playgroud)
我有一个数据框x像上面的一些NA,我想用相邻的非NA值填充,如2006-05-20它将是平均19和22
问题是怎么回事?
我正在编写一个非常基本的程序来使用scikit-learn的Imputer类来预测数据集中的缺失值.
我创建了一个NumPy数组,用strategy ='mean'创建了一个Imputer对象,并在NumPy数组上执行了fit_transform().
当我在执行fit_transform()之后打印数组时,'Nan'仍然存在,我没有得到任何预测.
我在这做错了什么?如何预测缺失值?
import numpy as np
from sklearn.preprocessing import Imputer
X = np.array([[23.56],[53.45],['NaN'],[44.44],[77.78],['NaN'],[234.44],[11.33],[79.87]])
print X
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit_transform(X)
print X
Run Code Online (Sandbox Code Playgroud) 我有一个熊猫DataFrame
,包括文本的一列,我想矢量化文本使用scikit学习的CountVectorizer
。但是,文本包含缺失值,因此我想在矢量化之前估算一个常量值。
我最初的想法是创建一个Pipeline
的SimpleImputer
和CountVectorizer
:
import pandas as pd
import numpy as np
df = pd.DataFrame({'text':['abc def', 'abc ghi', np.nan]})
from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy='constant')
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(imp, vect)
pipe.fit_transform(df[['text']]).toarray()
Run Code Online (Sandbox Code Playgroud)
但是,fit_transform
错误是因为SimpleImputer
输出2D 数组并CountVectorizer
需要1D input。这是错误消息:
AttributeError: 'numpy.ndarray' object has no attribute 'lower'
Run Code Online (Sandbox Code Playgroud)
问题:我该如何修改Pipeline
它才能使其正常工作?
注意:我知道我可以在 Pandas …
python machine-learning scikit-learn imputation countvectorizer
我有一个大熊猫数据成名df
.它有很多缺失.丢弃行/或逐行不是一种选择.输入中位数,平均值或最常见的值也不是一种选择(因此,插入pandas
和/或scikit
不幸的是没有做到这一点).
我遇到了一个看起来很整洁的包fancyimpute
(你可以在这里找到它).但我有一些问题.
这是我做的:
#the neccesary imports
import pandas as pd
import numpy as np
from fancyimpute import KNN
# df is my data frame with the missings. I keep only floats
df_numeric = = df.select_dtypes(include=[np.float])
# I now run fancyimpute KNN,
# it returns a np.array which I store as a pandas dataframe
df_filled = pd.DataFrame(KNN(3).complete(df_numeric))
Run Code Online (Sandbox Code Playgroud)
但是,它df_filled
是一个单一的向量,而不是填充的数据帧.如何通过插补来保持数据框?
我意识到,fancyimpute
需要一个numpay array
.我因此使用转换为df_numeric
数组as_matrix()
. …
我想用"行距离"填充缺失值到最近的非NA值.换句话说,如何将此示例数据框中的列x转换为y列?
# x y
#1 0 0
#2 NA 1
#3 0 0
#4 NA 1
#5 NA 2
#6 NA 1
#7 0 0
#8 NA 1
#9 NA 2
#10 NA 3
#11 NA 2
#12 NA 1
#13 0 0
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到dplyr group_by和mutate row_number()语句的正确组合来完成这个技巧.我调查过的各种插补包都是针对更复杂的场景而设计的,其中使用统计和其他变量进行插补.
d<-data.frame(x=c(0,NA,0,rep(NA,3),0,rep(NA,5),0),y=c(0,1,0,1,2,1,0,1,2,3,2,1,0))
Run Code Online (Sandbox Code Playgroud) imputation ×10
python ×5
r ×5
missing-data ×4
pandas ×3
scikit-learn ×3
dataframe ×2
na ×2
fancyimpute ×1
fillna ×1
locf ×1
numpy ×1
prediction ×1
python-3.x ×1