微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-如何顺序删除熊猫数据框中的特定值?

我在字典中存储了几个熊猫数据框:

df1=pd.DataFrame({'product':['ajoijoft','bbhjbh','cser','sesrd','yfgjke','tfyfyf','drdrtjg'],'price':[1,2,3,4,5,6,7],'label':['h','i','j','k','L','n','m']})
df2=pd.DataFrame({'product':['ajyughjoijoft','bdrddbhjbh','rdtrdcser','sdtrdthddesrd','yawafgjke','tesrgsfyfyf','sresedrdrtjg'],'price':[1,2,3,4,5,6,7],'label':['h','i','j','k','L','n','m']})
df3=pd.DataFrame({'product':['joijoft','bdbhjbh','rdcser','sdhddesrd','wajke','yf','sresedrdrtjg'],'price':[1,2,3,4,5,6,7],'label':['h','i','j','k','L','n','m']})

df_dict = {"A":df1,'B':df2, "C":df3}

我想知道产品中每个字符串的长度,所以我写如下.

for i, ii in df_dict.items():
    ii['Productsize'] = ii['product'].str.len()

这有效,我可以得到所有“产品”的长度.

接下来,我要删除产品字符串长度较短的行,即:Productsize< 6 我尝试使用此代码

for i, ii in df_dict.items():
    ii=ii[~(ii['Productsize'] <= 6)]

但是,这没有用.
如果我按以下方式单独编写(即不在循环中),则可以正常工作.

df1=df1[~(df1['Productsize'] <= 6)]

有谁知道可能是什么问题?

我尝试过你们建议的.不幸的是,这不起作用.你知道为什么吗…?这是代码.

df1=pd.DataFrame({'product':['ajoijoft','bbhjbh','cser','sesrd','yfgjke','tfyfyf','drdrtjg'],'price':[1,2,3,4,5,6,7],'label':['h','i','j','k','L','n','m']})
df2=pd.DataFrame({'product':['ajyughjoijoft','bdrddbhjbh','rdtrdcser','sdtrdthddesrd','yawafgjke','tesrgsfyfyf','sresedrdrtjg'],'price':[1,2,3,4,5,6,7],'label':['h','i','j','k','L','n','m']})
df3=pd.DataFrame({'product':['joijoft','bdbhjbh','rdcser','sdhddesrd','wajke','yf','sresedrdrtjg'],'price':[1,2,3,4,5,6,7],'label':['h','i','j','k','L','n','m']})

df_dict = {"A":df1,'B':df2, "C":df3}

for i, ii in df_dict.items():
    ii['Productsize'] = ii['product'].str.len()    

for i, ii in df_dict.items():
    df_dict[i] = ii[~(ii['Productsize'] <= 6)]

解决方法:

首先,您应该使用字典或列表来保存许多相似的结构化数据框,而不要用单独的数据框充斥全局环境.始终使用容器进行组织,并设置为运行诸如pd.concat之类的批量操作来构建主集.但是请确保直接将数据帧分配给字典,而不要创建单独的对象.

由于您的字典数据帧不更新的原因是您分配不正确. df的每个实例都需要替换为df [key].所以,

df[~(df['Productsize'] <= 6)]

将被替换为

df_dict[key][~(df_dict[key]['Productsize'] <= 6)]

将数据框存储在容器中时,只要引用它的更改,就不会丢失任何功能.因此,请相应调整:

for k, v in df_dict.items():
    df_dict[k]['Productsize'] = df_dict[k]['product'].str.len()  
    df_dict[k] = df_dict[k][~(df_dict[k]['Productsize'] <= 6)]

或者,使用字典循环的值项,但将对当前索引的临时更改重新分配为@phi explains.

for k, v in df_dict.items():
    v['Productsize'] = v['product'].str.len()  
    v = v[~(v['Productsize'] <= 6)]

    df_dict[k] = v

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐