如何将pandas Series写入/读取自csv文件?

20

我无法正确编写/读取系列...以下代码(以及许多变体)导致读取的系列与编写的系列不同...请注意,该系列读入到DataFrame中而不是Series。

In [55]: s = pd.Series({'a': 1, 'b': 2})

In [56]: s
Out[56]: 
a    1
b    2

In [57]: s.to_csv('/tmp/s.csv')

In [58]: !cat /tmp/s.csv
a,1
b,2

In [59]: pd.read_csv('/tmp/s.csv')
Out[59]: 
   a  1
0  b  2
4个回答

28
In [3]: s.to_csv('/home/wesm/tmp/sfoo.csv')

In [4]: Series.from_csv('/home/wesm/tmp/sfoo.csv')
Out[4]: 
a    1
b    2

您还可以像Rutger Kassies建议的那样,将header=None, index_col=0, squeeze=True传递给read_csv


6

CSV文件不包含pandas序列的结构信息。指定一些额外的参数可能会有所帮助。要将数据还原为正常格式,请使用以下方法:

pd.read_csv('s.csv', index_col=0, header=None)

但是这会给它添加默认的列和索引名称。如果您只想将您的Series/DF保存以便以后使用,最好使用.save()和pd.load()方法。

2

完美,我保存了并用 .pkl 扩展名来让下周的我记得如何加载它 :) - darrahts

0
pd.read_csv返回的DataFrame应用.squeeze()方法:
>>> s = pd.Series(pd.Series({'a': 1, 'b': 2}))
>>> s.to_csv('s.csv')
>>> pd.read_csv('s.csv', index_col = 0).squeeze()
a    1
b    2
Name: 0, dtype: int64

(使用pd.Series.read_csv的已接受解决方案现已过时。)

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