从数据框中删除行,df.drop 不删除行

如何解决从数据框中删除行,df.drop 不删除行

我正在制作一个表格,其中记录了类似产品的索引,然后将这些行中的数据粘贴到单个行中,该行聚合了所有数据。在此之后,该行被删除代码如下:

matchedproducts_df = pd.read_sql_query("SELECT * from matchedproducts",conn)

print(len(matchedproducts_df.index))

def mergeduplicates(df,similarity_field='',databasetable='',similar_level=85):
    
    print(len(df.index))

    def check_simi(d):
        global dupl_indexes,dupl_originals
        dupl_originals = []
        dupl_indexes = []
        for i in range(len(d.values) - 1):
            for j in range(i + 1,len(d.values)):
                if fuzz.token_sort_ratio(d.values[i],d.values[j]) >= similar_level:
                    dupl_indexes.append(d.index[j])
                    dupl_originals.append(d.index[i])

       

    indexes = df.groupby([True]*len(df))[similarity_field].apply(check_simi)

    a = 0
    for i in dupl_indexes:
        if df.iloc[i,5] == 'harveynichols':
            df.at[dupl_originals[a],'pricehn'] = df.loc[i,'price']
            df.at[dupl_originals[a],'availabilityhn'] = df.loc[i,'availability']
            df.at[dupl_originals[a],'storehn'] = df.loc[i,'store']
            df.at[dupl_originals[a],'hyperlinkhn'] = df.loc[i,'hyperlink']
            df.drop([i])
        elif df.iloc[i,5] == 'houSEOffraser':
            df.at[dupl_originals[a],'pricehof'] = df.loc[i,'availabilityhof'] = df.loc[i,'storehof'] = df.loc[i,'hyperlinkhof'] = df.loc[i,5] == 'selfridges':
            df.at[dupl_originals[a],'pricesf'] = df.loc[i,'availabilitysf'] = df.loc[i,'storesf'] = df.loc[i,'hyperlinksf'] = df.loc[i,5] == 'lookfantastic':
            df.at[dupl_originals[a],'pricelf'] = df.loc[i,'availabilitylf'] =  df.loc[i,'storelf'] = df.loc[i,'hyperlinklf'] = df.loc[i,5] == 'superdrug':
            df.at[dupl_originals[a],'pricesd'] = df.loc[i,'availabilitysd'] = df.loc[i,'storesd'] = df.loc[i,'hyperlinksd'] = df.loc[i,5] == 'boots':
            df.at[dupl_originals[a],'priceboots'] = df.loc[i,'availabilityboots'] = df.loc[i,'storeboots'] = df.loc[i,'hyperlinkboots'] = df.loc[i,5] == 'allbeauty':
            df.at[dupl_originals[a],'priceab'] = df.loc[i,'availabilityab'] = df.loc[i,'storeab'] = df.loc[i,'hyperlinkab'] = df.loc[i,5] == 'asos':
            df.at[dupl_originals[a],'pricea'] = df.loc[i,'availabilitya'] = df.loc[i,'storea'] = df.loc[i,'hyperlinka'] = df.loc[i,'hyperlink']
            df.drop([i])

        # for index_list in indexes:
        #     df.drop(index_list,inplace=True)

        a += 1

    print(len(df.index))

    df.to_csv('C:/Users/Judoo/Desktop/matchedproducts.csv')

    df.to_sql(databasetable,conn,if_exists="replace")
    
    conn.commit()

    conn.close()

mergeduplicates(matchedproducts_df,similarity_field='name',databasetable='matchedproducts')

代码适用于查找重复项并将其数据复制到相关的原始行中,但不会在检查后删除/删除该行。脚本前后表的长度相同。我不确定为什么会发生这种情况,任何帮助将不胜感激。

解决方法

df.drop() 方法通常会删除您想要删除特定行的行。您是否尝试过添加 inplace=True?因为它可能会保留旧索引。或者,您可以使用像 df = df.drop([i]) 这样的新 df 来做同样的事情。 See here

如果这些都不能解决您的问题,则您必须尝试使用​​ df.drop([i]) 的结构。

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?