Сохранение трехзначной значащей цифры на пандах с разными валютами и удаление 0 - PullRequest
0 голосов
/ 11 июля 2019

Я читаю курсы обмена. Но мне не нужна длинная значимая фигура. Только 3-4 сига фиг будет необходимо. Поскольку все курсы валют от доллара США к другим валютам отличаются, я не могу сделать это с помощью десятичных знаков. (напр. камбоджийский Riel KHR дал бы мне 4083.000 вместо 4083)

def round_to_1(x):
    return round(x, 4-int(floor(log10(abs(x))))-1)

df['Exchange Rate'] = df['Exchange Rate'].apply(round_to_1)

Сделал трюк, но оставляет нули в конце.

И попробовал

df['Exchange Rate'] = df['Exchange Rate'].astype(str).replace('\.0', '', regex=True)

, чтобы решить проблемы, но, похоже, не работает идеально.

Также слышал, что, хотя это не большие данные, метод применения медленный.

import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
from math import log10, floor

def round_to_1(x):
    return round(x, 4-int(floor(log10(abs(x))))-1)

res = requests.get("https://www.exchange-rates.org/currentRates/P/USD")
soup = BeautifulSoup(res.content,'lxml')
table = soup.find_all('table', {"class":"table table-fixedX table-exchange table-striped table-hover"}) 
df = pd.read_html(str(table))[0]
df['Convert To'] = df['Convert To'].str[:-3] + ' ' + df['Convert To'].str[-3:]
df['Exchange Rate'] = df['Exchange Rate'].apply(round_to_1)
#df['Exchange Rate'] = df['Exchange Rate'].astype(str).replace('\.0', '', regex=True)
df

Токовый выход

current output

Но ожидаемый результат -

expected output

  1. Есть ли лучший / эффективный способ иметь 4-сиг сигнал вместо функции применения?

  2. Как мне избавиться от 0 в конце?

1 Ответ

1 голос
/ 11 июля 2019

Просто

df['Exchange Rate'] = df['Exchange Rate'].round(n).apply(lambda x: '{0:g}'.format(float(x)))

для n десятичных знаков с удаленными конечными нулями.

Что касается производительности, под капотом .apply - просто петля по оси, поэтому его временная сложность линейна по количеству элементов этой оси.

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