猿问

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

我有一个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   d

x  10  10  NaN  10

y   1   5    2   3

z   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       d

x       10.0    10.0    0       10.0

y       1       5       2       3

z       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()


天涯尽头无女友
浏览 190回答 2
2回答

叮当猫咪

这是pandas中的“陷阱”(支持整数NA),其中具有NaN的整数列将转换为浮点数。这种权衡主要是出于内存和性能方面的考虑,并且使得最终的Series仍然是“数字”。一种可能性是改用dtype=object数组。
随时随地看视频慕课网APP

相关分类

Python
我要回答