首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas数据矢量化

Pandas数据矢量化
EN

Stack Overflow用户
提问于 2020-05-05 18:22:22
回答 1查看 53关注 0票数 0

这是一项数据清理练习,根据通过B解码的值,应该将dataframe的特定元素设置为NaN。

我编写了以下代码,其中3个嵌套循环将运行17h:

代码语言:javascript
复制
def Convert(input):
    X = np.fromstring(input[1:-1], dtype=np.int, sep=',')
    return X
tf = B
# B is a dataframe of descriptors for the A dataframe
# the column 'missing_or_unknown' in B is used to determine the elements of A to be replaced
tf['missing_or_unknown'] = B['missing_or_unknown'].apply(lambda x: Convert(x))
Y = tf['missing_or_unknown'].values
for i in range(0,len(A)):
    for j in range(0,85):
        for k in range (0,len(Y[j])):
            if A.iloc[i,j] == Y[j][k]:
                A[i,j] = np.nan

我怀疑瓶颈是长的外循环,因为len(A)是一百万。因此,这不是最好的使用Pandas的方法,我会选择:

代码语言:javascript
复制
for j in range(0,85):
      for k in range (0,len(Y[j])):
        if A.iloc[:,j] == Y[j][k]:
                A.iloc[:,j] = np.nan

但是,后者抛出了一个异常:

代码语言:javascript
复制
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

2个问题:

我对性能瓶颈的看法是正确的&得益于vectorization

  • how以正确的方式表示if条件,
  1. 的计算并不昂贵,它是一个查找数组来确定如何操作A数据格式的
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 18:40:36

如果您想用np.nan替换A的任何条目,等于Y在同一位置的条目,则可以使用:

代码语言:javascript
复制
A[A==Y]=np.nan

这能解决你的问题吗?

您的第一段代码可以工作,但是非常慢。

第二段代码无法工作,因为if语句是将整个列(系列)A.iloc[:,j]与一个值进行比较,您可以按照建议使用.any()进行比较。

在这里,我将比较我的代码wrt的速度--您第一次尝试使用维度100x85的两个dataframe:

代码语言:javascript
复制
import time
A = pd.DataFrame(np.zeros([100,85]))
A.iloc[0,1] = 1
Y = pd.DataFrame(np.ones([100,85]))
start_time = time.time()
A[A==Y]=np.nan
print("--- %s seconds ---" % (time.time() - start_time))
--- 0.030421018600463867 seconds ---

start_time = time.time()
for i in range(0,len(A)):
for j in range(0,85):
    for k in range (0,len(Y[j])):
        if A.iloc[i,j] == Y[j][k]:
            A[i,j] = np.nan
print("--- %s seconds ---" % (time.time() - start_time))
--- 17.413578748703003 seconds ---
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61620242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档