我有一个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
数组。
添加回答
举报
0/150
提交
取消