【问题标题】:Merge/concatenate CSV-imported dataframes and delete duplicates合并/连接 CSV 导入的数据框并删除重复项
【发布时间】:2016-11-09 20:40:52
【问题描述】:

我正在跟进我的previous question

已整理出一个循环来导入 CSV、连接数据和删除重复项。

files = glob.glob('./A08_csv/A08_B1_T*.csv')
dfs = [pd.read_csv(fp,  index_col=[0], parse_dates=[0], dayfirst=True) for fp in files] 
df = pd.concat(dfs)

df_purged = df.drop_duplicates(inplace=True)
print df_purged

但是 df.drop_duplicates(inplace=True) 不起作用(我肯定遗漏了一些东西)并且 print 返回一个 void。如何指定按索引检查重复项?添加列名似乎不起作用。

另外,如何将此循环转换为公式,以便我可以将此递归输入应用到具有不同文件名的 csv(即适用于 A08_B1_T*.csv(卧室)和 A08_KI_T*.csv(厨房)的东西)等等)?

【问题讨论】:

    标签: loops csv pandas duplicates


    【解决方案1】:

    您了解inplace = True 选项吗?

    如果你这样做inplace,则意味着你将修改df,所以不要将值设置为df_purged

    您在这里有两种解决方案:要么您想保留“未清除”数据框,然后您就这样做:

    df_purged = df.drop_duplicates()
    

    要么你不在乎保留它,你就去做:

    df.drop_duplicates(inplace = True)
    

    第一个选项,您的结果数据框将是 df_purged,但在第二个选项中,它将是 df,因为您执行了 inplace,它将被清除。

    话虽如此,如果你想清除你的索引,如果你不需要保留它,你可以reset_index 然后drop_duplicates 像这样:

    df_purged = df.reset_index().drop_duplicates(['index']).drop('index',1)
    

    如果您需要保留索引(以删除的行为模):

    df_purged = df.reset_index().drop_duplicates(['index']).set_index('index')
    del df.index.name
    

    (注意再次删除索引名只是为了美观)

    【讨论】:

      【解决方案2】:

      这会有帮助吗?

      df.drop_duplicates(['col_name']) 
      

      这是一个解决方案,将索引添加为数据框列,删除重复项,然后删除新列:

      df= df.reset_index().drop_duplicates(subset='Date', 'Time', keep='last').set_index(subset='Date', 'Time')
      

      【讨论】:

      • 肯定会(我试过了),但问题是我希望根据索引(日期和时间)识别重复项,并且不知道如何使用索引而不是' col_name'。如果我输入:df.drop_duplicates(['Date Time']) 这是 csv 上的列名,那么我会得到一个键错误
      • Cmari,谢谢。我现在收到KeyError: 'index'
      • CMari,它不起作用并返回给我KeyError: 'index'
      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 2018-03-28
      • 2011-11-18
      • 2018-06-09
      • 2021-03-08
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多