我一直想做以下工作,以便在pandas.DataFrame.someColumnName.unique()
内的每一列上执行pandas.DataFrame
函数的简单故事。
df.apply(func=unique, axis=0) # error NameError: name 'unique' is not defined
是否有一些技巧我忽视了这个工作或替代解决方案,给出了类似的操作,但在type()
的每一列上使用pandas.DataFrame
函数。
df.apply(func=lambda x: type(x[0]), axis=0)
请注意,我已经能够进行以下工作,但似乎不是python中的单行for循环方式,我发现apply语句是一个更好的自我记录实现。
for col in df.columns:
df[col].unique()
答案 0 :(得分:6)
unique
不是全局环境中的注册函数,您可以使用set
来实现此目的:
df.apply(set)
或者如果使用unique
,请从pandas
引用它,您也最好将结果转换为列表,因为不能保证所有列都包含相同数量的唯一元素:
df.apply(lambda x: pd.unique(x).tolist())
答案 1 :(得分:3)
如果您需要单线圈,您可以:
mydf<-matrix(sample(c(0,1,2),6*8,replace = T),ncol=8)
mismatches<-matrix(sample(c(T,F,NA),6*8,replace = T),ncol=8)
mydf<-mydf != 1
> (mydf+mismatches) == 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] NA NA FALSE FALSE NA FALSE TRUE FALSE
[2,] FALSE NA FALSE TRUE TRUE NA FALSE FALSE
[3,] TRUE NA NA FALSE FALSE TRUE FALSE FALSE
[4,] FALSE FALSE FALSE NA NA NA FALSE NA
[5,] NA FALSE FALSE NA NA FALSE TRUE TRUE
[6,] FALSE FALSE TRUE FALSE NA TRUE FALSE TRUE