将 pandas 数据框保存到 csv 时,如何保留 columns.name?
Posted
技术标签:
【中文标题】将 pandas 数据框保存到 csv 时,如何保留 columns.name?【英文标题】:When saving a pandas dataframe to csv how do I retain the columns.name? 【发布时间】:2014-09-28 20:39:27 【问题描述】:最初的问题
当我在 ipython 中运行以下命令时
import numpy as np
import pandas as pd
df = pd.DataFrame(np.round(9*np.random.rand(4,4), decimals=1))
df.index.name = 'x'
df.columns.name = 'y'
df.to_csv('output.csv')
df
它输出以下结果:
y 0 1 2 3
x
0 7.6 7.4 0.3 7.5
1 5.6 0.0 1.5 5.9
2 7.1 2.1 0.0 0.9
3 3.7 6.6 3.3 8.4
但是,当我打开 output.csv
时,“y”被删除了:
x 0 1 2 3
0 7.6 7.4 0.3 7.5
1 5.6 0 1.5 5.9
2 7.1 2.1 0 0.9
3 3.7 6.6 3.3 8.4
如何使df.columns.name
在我将数据帧输出到 csv 时保留?
粗略的解决方法
目前粗略的解决方法是我在做以下事情:
df.to_csv('output.csv', index_label = 'x|y')
这导致output.csv
读取:
x|y 0 1 2 3
0 7.6 7.4 0.3 7.5
1 5.6 0 1.5 5.9
2 7.1 2.1 0 0.9
3 3.7 6.6 3.3 8.4
更好的东西会很棒!感谢您的帮助(提前)。
上下文
这就是我的工作:https://github.com/SimonBiggs/Electron-Cutout-Factors
这是一个示例表:https://github.com/SimonBiggs/Electron-Cutout-Factors/blob/master/output/20140807_173714/06app06eng/interpolation-table.csv
【问题讨论】:
我认为这个(AFAIK)没有选项的部分原因是很难知道列索引名称会去哪里 - 你认为它到底属于哪个单元格? 这将与用作 ipython 输出的显示设置相同。 “y”将进入单元格(1,1),“x”将进入单元格(2,1),左上角的数据值将从单元格(3,2)开始。 【参考方案1】:您可以传递一个列表来命名列,然后您可以在写入 csv 时指定索引名称:
df.columns = ['column_name1', 'column_name2', 'column_name3']
df.to_csv('/path/to/file.csv', index_label='Index_name')
【讨论】:
【参考方案2】:这个怎么样?它略有不同,但希望可以使用,因为它符合 CSV 范式:
>>> df.columns = ['y'.format(name) for name in df.columns]
>>> df.to_csv('output.csv')
>>> print open('output.csv').read()
x,y0,y1,y2,y3
0,3.5,1.5,1.6,0.3
1,7.0,4.7,6.5,5.2
2,6.6,7.6,3.2,5.5
3,4.0,2.8,7.1,7.8
【讨论】:
感谢您的报价,很遗憾这不能满足我的需求。我关心列和索引中写入的数字。 您能否更具体地说明我的解决方案给您带来的问题?似乎您所要求的内容将要求您在要求 Pandas 编写 CSV 正文之前编写自己的标题行。如果你真的需要,你可以这样做。 首先:我希望代码尽可能地可读和透明。所以最小的并发症很重要。 第二: 我正在创建一个查找表以用于插值。轴代表“宽度”和“纵横比”,因此是标题。完整代码可以在我的 gihtub here 看到。可以看到这些插值表之一的示例here。 我认为您的“粗略解决方法”与您可能得到的一样好。 好的,谢谢约翰。此外,对于未来的读者,表格链接已更改。现在应该可以找到一个示例表 here以上是关于将 pandas 数据框保存到 csv 时,如何保留 columns.name?的主要内容,如果未能解决你的问题,请参考以下文章