为了账号安全,请及时绑定邮箱和手机立即绑定

Python Pandas:使用整数将数据帧输出到csv

Python Pandas:使用整数将数据帧输出到csv

天涯尽头无女友 2021-03-29 12:09:52
我有一个pandas.DataFrame希望导出到CSV文件的文件。但是,pandas似乎将某些值float而不是int类型写为。我找不到如何更改此行为。建立数据框:df = pandas.DataFrame(columns=['a','b','c','d'], index=['x','y','z'], dtype=int)x = pandas.Series([10,10,10], index=['a','b','d'], dtype=int)y = pandas.Series([1,5,2,3], index=['a','b','c','d'], dtype=int)z = pandas.Series([1,2,3,4], index=['a','b','c','d'], dtype=int)df.loc['x']=x; df.loc['y']=y; df.loc['z']=z查看:>>> df    a   b    c   dx  10  10  NaN  10y   1   5    2   3z   1   2    3   4导出它:>>> df.to_csv('test.csv', sep='\t', na_rep='0', dtype=int)>>> for l in open('test.csv'): print l.strip('\n')        a       b       c       dx       10.0    10.0    0       10.0y       1       5       2       3z       1       2       3       4为什么十位数有一个零点?当然,我可以将此函数粘贴到管道中以重新转换整个CSV文件,但似乎没有必要:def lines_as_integer(path):    handle = open(path)    yield handle.next()    for line in handle:        line = line.split()        label = line[0]        values = map(float, line[1:])        values = map(int, values)        yield label + '\t' + '\t'.join(map(str,values)) + '\n'handle = open(path_table_int, 'w')handle.writelines(lines_as_integer(path_table_float))handle.close()
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这是pandas中的“陷阱”(支持整数NA),其中具有NaN的整数列将转换为浮点数。

这种权衡主要是出于内存和性能方面的考虑,并且使得最终的Series仍然是“数字”。一种可能性是改用dtype=object数组。


查看完整回答
反对 回复 2021-04-01
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信