python删除数据框中的字符串列_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

标签:pandas,for-loop,python

来源: https://codeday.me/bug/20191109/2010646.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值