考虑具有 date
列作为索引和三列 x
、 y
和 z
的数据框,并进行一些观察。我想将此数据框的内容写入 .csv 文件。我知道我可以为此使用 df.to_csv
,但是,我想为单位添加第二个标题行。在此示例中,所需的 .csv 文件如下所示:
date,x,y,z
(yyyy-mm-dd),(s),(m),(kg)
2014-03-12,1,2,3
2014-03-13,4,5,6
...
最佳答案
这不会在您的示例中产生确切的输出,但很接近。您可以使用多索引列来存储带有列标签的第二个标题(单位):
>>> import pandas as pd
>>> columns = pd.MultiIndex.from_tuples(
... zip(['date', 'x', 'y', 'z'],
... ['(yyyy-mm-dd)', '(s)', '(m)', '(kg)']))
>>> data = [['2014-03-12', 1, 2, 3],
... ['2014-03-13', 4, 5, 6]]
>>> df = pd.DataFrame(data, columns=columns)
>>> df
date x y z
(yyyy-mm-dd) (s) (m) (kg)
0 2014-03-12 1 2 3
1 2014-03-13 4 5 6
以这种方式存储第二个标题可以让您的列保持正确的类型(例如,列
x
应该是整数类型):>>> df.dtypes
date (yyyy-mm-dd) object
x (s) int64
y (m) int64
z (kg) int64
dtype: object
如果您已将第二个标题作为一行存储在
DataFrame
中,那么您的 dtypes
列将变为 object
,这可能是您不想要的。以 CSV 格式编写
DataFrame
会产生与您的示例非常相似的内容:>>> df.to_csv('out.csv', index=False)
>>> !cat out.csv
date,x,y,z
(yyyy-mm-dd),(s),(m),(kg)
,,,
2014-03-12,1,2,3
2014-03-13,4,5,6
唯一的区别是多出来的一行逗号,它是 Pandas 将多行标题与实际数据行分开的方式。这允许将 CSV 文件读回等效的
DataFrame
:>>> df2 = pd.read_csv('out.csv', header=[0, 1])
>>> df2
date x y z
(yyyy-mm-dd) (s) (m) (kg)
0 2014-03-12 1 2 3
1 2014-03-13 4 5 6
注意:我发现很多这些信息分散在 this SO question 中。
关于python - 如何使用 pandas to_csv() 编写带有多个标题行的 csv 文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22356746/