Печать и запись правильно отформатированного числа - PullRequest
1 голос
/ 10 мая 2019

Хотя я могу печатать # десятичных знаков в консоли, я значительно усложняюсь при попытке записи в CSV с ПРАВИЛЬНО отформатированным числом.В приведенном ниже коде мне каким-то образом удалось разделить целые числа на тысячи и получить результат в CSV, но я не могу избавиться от лишних ".,".Цикл for - действительно сложная задача.Может быть, кто-то может сказать мне, как взломать головоломку.

Просмотреть строки кода ниже.Должно было выглядеть как в печатном виде в консоли, так и в CSV-файле, в который я пишу:

23 400 344,567, 54 363 744,678, 56 789 117 176, 4 132 454,987

ВХОД:

import pandas as pd

def insert_comma(s):
     str=''
     count=0
     for n in reversed(s):
          str += n
          count+=1
          if count == 3:
               str += ','
               count=0

     return ''.join([i for i in reversed(str)][1:])


d = {'Quarters' : ['Quarter1','Quarter2','Quarter3','Quarter4'],
 'Revenue':[23400344.567, 54363744.678, 56789117.456, 4132454.987]}
df=pd.DataFrame(d)

df['Revenue']=df.apply(lambda x: insert_comma(str(x['Revenue'] / 1000)), axis=1)

# pd.options.display.float_format = '{:.0f}'.format

df.to_csv("C:\\Users\\jcst\\Desktop\\Private\\Python data\\new8.csv", sep=";")

# round to two decimal places in python pandas

# .options.display.float_format = '{:.0f}'.format
print(df)

ВЫХОД

   Quarters      Revenue
0  Quarter1  234,00.,344
1  Quarter2  543,63.,744
2  Quarter3  567,89.,117
3  Quarter4    1,32.,454

Ответы [ 3 ]

3 голосов
/ 10 мая 2019

Вы можете использовать это.Используйте строку формата, чтобы использовать запятую (и) и 3 десятичных знака для всех строк в столбце Доход.

df['Revenue']=df['Revenue'].apply('{0:,.3f}'.format)

Результат:

   Quarters         Revenue
0  Quarter1  23,400,344.567
1  Quarter2  54,363,744.678
2  Quarter3  56,789,117.456
3  Quarter4   4,132,454.987
1 голос
/ 10 мая 2019

Предложение:

insertCommas = lambda x: format(x, ',')

Работает так:

>>> insertCommas(23400344.567)
'23,400,344.567'
0 голосов
/ 10 мая 2019

Это работает для меня:

df['Revenue'] = df['Revenue'].apply(lambda x:f"{x:,.3f}")

Это решение использует Python 3.6+ f-строк , чтобы вставить запятые в качестве разделителя тысяч и показать 3 десятичных знака.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...