Pandas to_csv如何将int和float变量格式化为逗号分隔值

时间:2017-03-28 18:57:17

标签: python csv pandas

我处理的所有数据都需要以逗号分隔值的形式报告。在将数据写入.csv文件后,我只对逗号分隔值感兴趣。我喜欢将它们保存为我的pandas数据帧中的int或float。

我可以使用:

将浮点数输出为零小数
 df.to_csv('c:\Awesome\Groovy.csv', float_format = '%.0f')

但是每当我尝试在浮动中使用逗号时,它都会起作用。

 df.to_csv('c:\Awesome\Groovy.csv', float_format = ':,.0f') ##Nope
 df.to_csv('c:\Awesome\Groovy.csv', float_format = {:,.0f}'.format) ##Nope

我对int的计划是首先将它们转换为数据帧中的float,然后使用.to_csv函数对它们进行格式化。有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这对你来说可能过于愚蠢。无论如何这里都有。使用此答案https://stackoverflow.com/a/4205875/42346,我们可以使用逗号:

def thous(x, sep=',', dot='.'):
    num, _, frac = str(x).partition(dot)
    num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1]
    if frac:
        num += dot + frac
    return num

df['my_column'] = df['my_column'].apply(lambda x: thous(x))

使用我从另一个SO问题中找到的一些样本数据:

>>> df = pd.DataFrame({'date':['2017-03-10','2017-03-11','2017-03-12'],
                       'activate_time':['2017-03-10 12:13:30','2017-03-11 13:57:49','2017-03-12 14:28:05'],
                       'mycol':[1234.56789,9876.54321,1111111.11111]})
>>> df['mycol'] = df['mycol'].apply(lambda x: thous(x))
>>> df
          activate_time        date            mycol
0   2017-03-10 12:13:30  2017-03-10      1,234.56789
1   2017-03-11 13:57:49  2017-03-11      9,876.54321
2   2017-03-12 14:28:05  2017-03-12  1,111,111.11111

答案 1 :(得分:0)

根据上面bernie的回答,这是我最终得到的代码。我想在这里发布给其他人。

import re
def thous(x, sep=',', dot='.'):
   y = round(x)
   num, _, frac = str(y).partition(dot)
   num = re.sub(r'(\d{3})(?=\d)', r'\1'+sep, num[::-1])[::-1]
   #  comment out for no 0    if frac:
   #  comment out for no 0   num += dot + frac
   return num

num = df.select_dtypes(include=[np.number]) #selects only numeric dtypes
for x in num:
     df[x] = df[x].apply(lambda x: thous(x))

在你使用to_csv命令之前运行它,你就是金色的。干杯!