如何将 Pandas 数据添加到现有的 csv 文件中?

2024-12-20 08:37:00
admin
原创
154
摘要:问题描述:我想知道是否可以使用 pandasto_csv()函数将数据框添加到现有的 csv 文件中。csv 文件具有与加载的数据相同的结构。解决方案 1:您可以在 pandas 函数中指定 python 写入模式to_csv。对于附加,它是“a”。就你的情况而言:df.to_csv('my_csv.csv'...

问题描述:

我想知道是否可以使用 pandasto_csv()函数将数据框添加到现有的 csv 文件中。csv 文件具有与加载的数据相同的结构。


解决方案 1:

您可以在 pandas 函数中指定 python 写入模式to_csv。对于附加,它是“a”。

就你的情况而言:

df.to_csv('my_csv.csv', mode='a', header=False)

默认模式为“w”。

如果文件最初可能丢失,则可以使用此变体确保在第一次写入时打印标题:

output_path='my_csv.csv'
df.to_csv(output_path, mode='a', header=not os.path.exists(output_path))

解决方案 2:

您可以通过以附加模式打开文件来附加到 csv :

with open('my_csv.csv', 'a') as f:
    df.to_csv(f, header=False)

如果这是你的 csv foo.csv,:

,A,B,C
0,1,2,3
1,4,5,6

如果你读完该内容然后附加,例如df + 6

In [1]: df = pd.read_csv('foo.csv', index_col=0)

In [2]: df
Out[2]:
   A  B  C
0  1  2  3
1  4  5  6

In [3]: df + 6
Out[3]:
    A   B   C
0   7   8   9
1  10  11  12

In [4]: with open('foo.csv', 'a') as f:
             (df + 6).to_csv(f, header=False)

foo.csv变成:

,A,B,C
0,1,2,3
1,4,5,6
0,7,8,9
1,10,11,12

解决方案 3:

with open(filename, 'a') as f:
    df.to_csv(f, header=f.tell()==0)
  • 如果文件不存在则创建文件,否则附加

  • 如果正在创建文件,则添加标题,否则跳过它

解决方案 4:

我使用一个小辅助函数和一些标头检查保护措施来处理所有问题:

def appendDFToCSV_void(df, csvFilePath, sep=","):
    import os
    if not os.path.isfile(csvFilePath):
        df.to_csv(csvFilePath, mode='a', index=False, sep=sep)
    elif len(df.columns) != len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns):
        raise Exception("Columns do not match!! Dataframe has " + str(len(df.columns)) + " columns. CSV file has " + str(len(pd.read_csv(csvFilePath, nrows=1, sep=sep).columns)) + " columns.")
    elif not (df.columns == pd.read_csv(csvFilePath, nrows=1, sep=sep).columns).all():
        raise Exception("Columns and column order of dataframe and csv file do not match!!")
    else:
        df.to_csv(csvFilePath, mode='a', index=False, sep=sep, header=False)

解决方案 5:

最初从 pyspark 数据框开始 - 考虑到我的 pyspark 数据框中的架构/列类型,我得到了类型转换错误(转换为 pandas df 然后附加到 csv 时)

通过强制每个 df 中的所有列为字符串类型,然后将其附加到 csv 来解决问题,如下所示:

with open('testAppend.csv', 'a') as f:
    df2.toPandas().astype(str).to_csv(f, header=False)

解决方案 6:

2021 年我就是这样做的

假设我有一个 csv sales.csv,其中包含以下数据:

销售.csv

Order Name,Price,Qty
oil,200,2
butter,180,10

为了添加更多行,我可以将它们加载到数据框中并将其附加到 csv,如下所示:

import pandas

data = [
    ['matchstick', '60', '11'],
    ['cookies', '10', '120']
]
dataframe = pandas.DataFrame(data)
dataframe.to_csv("sales.csv", index=False, mode='a', header=False)

输出结果为:

Order Name,Price,Qty
oil,200,2
butter,180,10
matchstick,60,11
cookies,10,120

解决方案 7:

有点晚了,但是如果您多次打开和关闭文件,或者记录数据,统计数据等,您也可以使用上下文管理器。

from contextlib import contextmanager
import pandas as pd
@contextmanager
def open_file(path, mode):
     file_to=open(path,mode)
     yield file_to
     file_to.close()


##later
saved_df=pd.DataFrame(data)
with open_file('yourcsv.csv','r') as infile:
      saved_df.to_csv('yourcsv.csv',mode='a',header=False)`
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用