【问题标题】:Pandas dropping duplicates doesn't drop last duplicate熊猫删除重复项不会删除最后一个重复项
【发布时间】:2023-03-31 02:05:01
【问题描述】:

设置 keep=False 应该删除所有重复项,但如果我运行我的函数仍会返回上一行的重复项

def date_to_csv():
   import pandas as pd
   from random import randint
   df = pd.read_csv("test.csv")
   df = df.append({'Date': datetime.date.today(), 'Price': randint(1,100)}, ignore_index=True)
   result_df = df.drop_duplicates(keep=False)
   result_df.to_csv('test.csv', mode='a', index=False, header=None)

如果我的 csv 文件是空的,只有列标题“日期”和“价格”,并且我运行我的函数 3 次,它会在 csv 中返回:

Date,Price
2021-06-26,74
2021-06-26,74
2021-06-26,51
2021-06-26,51
2021-06-26,13

当我期望它返回如下内容时:

Date,Price
2021-06-26,74
2021-06-26,51
2021-06-26,13

【问题讨论】:

  • 你的 test.csv 中还有其他字段吗?
  • 只有两个列标题“日期”和“价格”

标签: python pandas dataframe csv duplicates


【解决方案1】:

由于mode='a',您无法在多次执行函数后删除以前的重复项。这是您预期行为的代码:

import pandas as pd
from datetime import datetime


def date_to_csv(): 
     df = pd.read_csv('test.csv') 
     df = df.append({'Date': str(datetime.now().date()), 'Price': randint(1, 100)}, ignore_index=True) 
     df.to_csv('test.csv', index=False) 

【讨论】:

  • 最后一个Date 值也是一个日期时间对象,前面的是字符串。
猜你喜欢
  • 2017-03-03
  • 2019-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多