python-3.x - 仅将数据框中的新行添加到 csv 文件

标签 python-3.x pandas csv dataframe

每天我都会收到一个 pandas具有名为 column1 的五列的数据框, column2 , column3 , column4 , column5 .我想将以前没有收到的行添加到我保留唯一行的文件中,名为 known_data.csv .为了做到这一点,我写了一些代码,应该

  • known_data.csv 加载数据作为名为 existing_data 的数据帧
  • existing_data 添加一个名为“现有”的新列df
  • 合并旧的 existing_data带有名为 new_data 的数据帧的数据帧在五列
  • 检查是否new_data通过查看 merge[merge.existing.isnull()] 包含新行(新数据与现有数据的补充)
  • 将新行附加到 known_data.csv文件

  • 我的代码看起来像这样
    existing_data = pd.read_csv("known_data.csv")
    
    existing_data['existing'] = 'yes'
    
    merge_data = pd.merge(new_data, existing_data, on = ['column1', 'column2', 'column3', 'column4', 'column5'], how = 'left')
    
    complement = merge_data[merge_data.existing.isnull()]
    
    del complement['existing']
    
    complement.to_csv("known_data.csv", mode='a', index=False,
                      header=False) 
    
    不幸的是,这段代码没有按预期运行:补码永远不会为空。即使我收到已经记录在 known_data.csv 中的数据,new_data的一些行无论如何都被附加到文件中。
    问题:我究竟做错了什么?我怎么解决这个问题?它与我读取文件和写入文件的方式有关吗?
    编辑:添加名为 existing 的新列到 existing_data dataframe 可能不是检查 existing_data 之间的补码的最佳方式和 new_data .如果有人有更好的建议,将不胜感激!
    编辑 2:问题是,尽管数据帧看起来相同,但有些值的类型不同。不知何故,这个错误只在我尝试合并新数据帧的一个子集时显示。

    最佳答案

    我认为您正在寻找的是 concat 操作,然后是删除副本。

    # Concat the two dataframes into a new dataframe holding all the data (memory intensive):
    complement = pd.concat([existing_data, new_data], ignore_index=True)
    
    # Remove all duplicates:
    complement.drop_duplicates(inplace=True, keep=False)
    

    这将首先创建一个包含所有旧数据和新数据的数据框,然后在第二步中删除所有重复条目。您还可以指定某些列来仅比较重复值!

    请参阅此处的文档:

    连接
    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

    drop_duplicates
    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html

    关于python-3.x - 仅将数据框中的新行添加到 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59093445/

    相关文章:

    python - 键入多种类型的提示值?

    python - 无法在 python 中调用类函数(TypeError : object() takes no parameters)

    python - Pandas groupby 根据列值和组大小份额选择前 N 行

    java - PostgreSQL -\复制命令

    python - 如何通过使用确认的帐户创建功能将用户名和密码写入 csv (txt) 文件中的记录?

    python - 使用 Python 而不是 HTML 从网站中提取链接

    python - Python 是否提供了一种访问最近封闭范围之外的变量的方法?

    python - Pandas:将函数应用于每对列

    python - 如何结合.shift()在dataframe中进行查询

    arrays - 如何使用 JQ 在点后将最后一列的数字舍入到小数点后两位?