Bir CSV dosyasına vermek istediğim bir pandas.DataFrame
var. Ancak pandalar, bazı değerleri int
türleri yerine float
olarak yazıyor gibi görünüyor. Bu davranışı nasıl değiştireceğimi bulamadım.Python pandas: tamsayılarla csv'ye çıktı verileri çerçevesi
bir veri çerçevesini oluşturma:
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
Görünüm o:
>>> df
a b c d
x 10 10 NaN 10
y 1 5 2 3
z 1 2 3 4
İhracat o:
>>> 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
Neden onlarca bir nokta sıfır var?
Tabii, sadece bütün CSV dosyasını yeniden dönüştürmeye benim boru hattına bu işlevi sopa olabilir, ama gereksiz görünüyor:
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()
pd' :) –
olarak 'ithalat pandalar Bunu neden yapmalıyım @Andy gerektiğini siz: Bu başvuru için sonunda benim sorun çözüldü nedir? İsim alanları, onları kısaltmanıza ve okunamaz hale gelene kadar harika bir fikir. – xApple
Bu standart, benzer şekilde numpy np'dir (ve pd.np olarak kullanılabilir). pandalar pd'den anlamlı ölçüde daha uzundur, her defasında yazarak kodu * daha az * okunabilir IMO yapar. –