Pandas系列转换为Excel

8

pandas.Series对象确实有很多to_*函数,但它缺少一个to_excel函数。是否有更简单/更好的方法来完成此片段第3行中的导出?首先将Series转换为DataFrame感觉有点笨拙,只是为了进行简单的I/O操作:

import numpy as np
import pandas as pd
s = pd.Series([1,3,5,np.nan,6,8])
pd.DataFrame(s).to_excel('s.xlsx', 's')
2个回答

15

你可以选择:

1. 从头开始构建一个DataFrame

这种情况下,你已经回答了自己的问题。

2. 使用Series.to_frame()

s.to_frame(name='column_name').to_excel('xlfile.xlsx', sheet_name='s')

1
好的,答案实际上是“不”。但是to_frame很好用,可以为我节省一行手动更改s.name的代码,并且在我的环境中看起来不像一个丑陋的类型转换(对我来说pd.DataFrame就像是这样)。 - ojdo
如果你感兴趣的话,这可能是在Github上一个不错的第一次拉取请求,尽管我不确定将单列写入Excel表格有多常见。 - Phillip Cloud
如果这种情况再次发生在我身上,我会考虑这样做;这只是因为我对 DataFrame 进行求和时出了问题。 - ojdo
鉴于你可能需要知道,还有一个名为DataFrame.squeeze()的方法,它可以将单列的DataFrame转换成Series - Phillip Cloud
有人在 GitHub 上创建了那个问题吗?我找不到它。 - Ivan
我几次之前在 https://github.com/pandas-dev/pandas/issues/8825 上提出了这个问题。 - scls

3

0.20 新特性: Series.to_excel()

从 pandas 0.20 开始,Series 现在直接支持 to_excel (详见PR #8825):

import pandas as pd
s = pd.Series([0, 1, 2, 4, 8, 16], name='a_series')
s.to_excel('foo.xlsx')

文件foo.xlsx的内容如下:

  |  A | B         | 
--+----+-----------+---------------------
1 |    | a_series  | 
2 |  0 | 0         | 
3 |  1 | 1         | 
4 |  2 | 2         | 
5 |  3 | 4         | 
6 |  4 | 8         | 
7 |  5 | 16        | 
-.           ,---------------------------
  \ Sheet 1 /  \ Sheet 2 / \ Sheet 3 /

1
有没有办法将Series的书写方式从垂直改为水平,以便使用索引作为列? - Krzysztof Słowiński
1
@KrzysztofSłowiński 不是直接使用,而是通过 s.to_frame().T.to_excel(...),使用DataFrame的转置操作。 - ojdo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接