Python 如何按顺序删除数据帧中的特定值?

Python 如何按顺序删除数据帧中的特定值?,python,pandas,for-loop,Python,Pandas,For Loop,我有几个熊猫数据帧存储在字典中: 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','sdtrd

我有几个
熊猫
数据帧存储在字典中:

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():
    df_dict[i] = ii[~(ii['Productsize'] <= 6)]
    #df_dict[i] = ii[(ii['Productsize'] > 6)] 
我想知道
product
中每个字符串的长度,所以我写如下

for i, ii in df_dict.items():
    ii['Productsize'] = ii['product'].str.len()
这很有效,我可以得到所有“产品”的长度

接下来,我想删除具有短
product
字符串长度的行,即:
Productsize<6

我尝试使用以下代码:

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


ii=ii[~(ii['Productsize']您可能不应该构建框架字典。但是如果您构建了框架字典,您应该使用以下代码来修改字典:

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():
    df_dict[i] = ii[~(ii['Productsize'] <= 6)]
    #df_dict[i] = ii[(ii['Productsize'] > 6)] 
df_dict.items()中的i、ii的

df_dict[i]=ii[~(ii['Productsize']6]

为什么我的代码不工作的语句
ii=ii[~(ii['Productsize']

当你打电话的时候

for i, ii in df_dict.items()
python创建2个变量i和ii,分配给键和数据帧。
同时,您的
df1、df2、df3、df_dict
不会改变(在第一个循环中,
ii
df1
引用相同的对象数据帧,但它们仍然是两个不同的变量)

然后下一个表达式创建另一个dataframe对象,将
ii
分配给新创建的对象。您的
df1、df2、df3、df_dict
仍然没有更改

ii = ii[~(ii['Productsize'] <= 6)]
并更改
df_dict

df_dict[i] = ii
您可能需要考虑变量,如
标记

df1 = pd.DataFrame(...)  # Create a dataframe and give it a tag df1
ii = df1  # Give the same dataframe a tag ii
ii = ii[ii.ProductSize < 6]  # Move the tag ii to the new filtered dataframe. df1 still stucks with the first data frame
df1=pd.DataFrame(…)#创建一个DataFrame并给它一个标记df1
ii=df1#给同一数据帧一个标签ii
ii=ii[ii.ProductSize<6]#将标签ii移动到新的过滤数据帧。df1仍然与第一个数据帧绑定
首先,您应该使用字典或列表来保存许多类似的结构化数据帧,而不是用单独的数据帧充斥您的全局环境。始终使用容器来组织您自己,并设置为运行批量操作,如
pd.concat
来构建主集。但请确保直接将数据帧分配给字典而不是创建单独的对象

至于字典数据帧不更新的原因是您没有正确分配。
df
的每个实例都需要替换为
df[key]
。因此

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

df[~(df['Productsize']谢谢DyZ。但是,这也不起作用…例如,如果我显示df1,没有任何更改…你想更改
df1
还是
df_dict
?这是两个不同的对象。这就是为什么我建议不要使用字典。我想更改所有数据帧df1、df2、df3。因为我有很多数据帧超过100个,我想我必须使用“for”。
df_dict['A']
有您的
df1
的一个修改副本。但您可能首先做错了什么。为什么您需要字典?为什么不将所有数据帧串联在一个数据库中,并立即更改组合的数据库?每个数据帧表示一个人的数据。删除“Productsize”后小于6,我想为每个数据帧绘制一个绘图。如果我合并所有数据帧,来自不同人的数据将混合在一起,我无法绘制绘图。也就是说,我认为在合并所有数据帧后,会有一些方法提取单个数据。非常感谢。我尝试了第一个数据帧,但出现以下错误“TypeError:'DataFrame'对象是可变的,因此无法对其进行哈希运算”。此外,我尝试了最后一个对象。但是,DataFrame没有更改。例如,df1不应具有“cser”“但它仍然存在。如果你们能够成功地更改数据帧,我的环境可能与你们的不同。我在ipython上使用python3。这会有所不同…??请参阅编辑修复第一个选项的关键问题。至于第二个选项,我希望你们不要将df1(单独变量)与df_dict的第一个数据帧元素混淆(许多物品的容器)。后者应该更新。非常感谢你,phi!
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)]
for k, v in df_dict.items():
    v['Productsize'] = v['product'].str.len()  
    v = v[~(v['Productsize'] <= 6)]

    df_dict[k] = v