使用 pandas 在 CSV 文件中写入注释

问题描述 投票:0回答:2

我想在使用

pandas
创建的 CSV 文件中写一些注释。我在
DataFrame.to_csv
中没有找到任何选项(尽管
read_csv
可以跳过注释),在标准
csv
模块中也没有找到任何选项。我可以打开文件,写入注释(以
#
开头的行),然后将其传递给
to_csv
。有没有人有更好的选择?

python pandas export-to-csv
2个回答
60
投票

df.to_csv
接受文件对象。因此,您可以在
a
模式下打开文件,编写注释并将其传递给数据框 to_csv 函数。

例如:

In [36]: df = pd.DataFrame({'a':[1,2,3], 'b':[1,2,3]})

In [37]: f = open('foo', 'a')

In [38]: f.write('# My awesome comment\n')

In [39]: f.write('# Here is another one\n')

In [40]: df.to_csv(f)

In [41]: f.close()

In [42]: more foo
# My awesome comment
# Here is another one
,a,b
0,1,1
1,2,2
2,3,3

9
投票

@Vor 的解决方案的另一种方法是首先将注释写入文件,然后使用

mode='a'
to_csv()
将数据帧的内容添加到同一文件中。根据我的基准(如下),这大约需要以附加模式打开文件,添加注释,然后将文件处理程序传递给 pandas (根据@Vor的答案)。考虑到这是 pandas 在内部所做的事情(
DataFrame.to_csv()
调用
CSVFormatter.save()
,它使用
_get_handles()
通过 open()
 读取文件
),类似的时间安排是有意义的。

另外,通过

with
语句可以方便地处理文件 IO,这可以确保打开的文件在使用完后关闭并保留
with
语句。请参阅下面的基准测试中的示例。

读入测试数据

import pandas as pd
# Read in the iris data frame from the seaborn GitHub location
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
# Create a bigger data frame
while iris.shape[0] < 100000:
    iris = iris.append(iris)
# `iris.shape` is now (153600, 5)

1.使用相同的文件处理程序追加

%%timeit -n 5 -r 5

# Open a file in append mode to add the comment
# Then pass the file handle to pandas
with open('test1.csv', 'a') as f:
    f.write('# This is my comment\n')
    iris.to_csv(f)
每次循环 972 ms ± 31.9 ms(5 次运行的平均值 ± 标准差,每次 5 个循环)

2.使用
to_csv(mode='a')

重新打开文件
%%timeit -n 5 -r 5

# Open a file in write mode to add the comment
# Then close the file and reopen it with pandas in append mode
with open('test2.csv', 'w') as f:
    f.write('# This is my comment\n')
iris.to_csv('test2.csv', mode='a')
每次循环 949 ms ± 19.3 ms(5 次运行的平均值 ± 标准差,每次 5 个循环)
© www.soinside.com 2019 - 2024. All rights reserved.