我在字典中存储了几个熊猫数据框:
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 举报,一经查实,本站将立刻删除。