Как найти число в строке в кадре данных и переформатировать это число, используя разделитель тысяч? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть приведенный ниже пример

df = pd.DataFrame({'City': ['Houston', 'Austin', 'Hoover','NY','LA'],
                   'Rules': ['ACH_CM > 28419581.51 and AMT_PM > 30572998.00 and AMT_PPM > 30572998.00 and AMT_CM > 30572998.00'
                             , 'MAA_PM and _AMT_PPM > 30572998.00 and _AMT_PM > 16484703.01 and AMT_CM > 28419581.51'
                             , 'MAA_PM and AMT_CM > 284 and AMT_PM > 30572998.00 and AMT_PPM > 30572998.00 and AMT_PPPM > 30572998.00 and ACH_AMT_PPM > 16484703.01'
                            ,'MAA_CM'
                            ,'_AMT_PPM > 30572.00']},columns=['City', 'Rules'])

Требуемый вывод:

City    Rules
Houston ACH_CM > 28,419,581.51 and AMT_PM > 30,572,998.00 and AMT_PPM > 30,572,998.00 and AMT_CM > 30,572,998.00
Austin  MAA_PM and _AMT_PPM > 30,572,998.00 and _AMT_PM > 16,484,703.01 and AMT_CM > 28,419,581.51
Hoover  MAA_PM and AMT_CM > 284 and AMT_PM > 30,572,998.00 and AMT_PPM > 30,572,998.00 and AMT_PPPM > 30,572,998.00 and ACH_AMT_PPM > 16,484,703.01
NY      MAA_CM
LA      AMT_PPM > 30,572.00

Я считаю, что должен использовать "{0:,.0f}".format, но не уверен, как его применить.

Ответы [ 3 ]

0 голосов
/ 14 октября 2018

Это должно работать.

def _format(x):
    unformatted = re.findall("\d+\.\d+", df['Rules'].iloc[0])
    formatted = ['{:,}'.format(float(x)) for x in unformatted]
    for i in range(len(unformatted)):
        x = x.replace(unformatted[i], formatted[i])
    return x

df['Rules'] = df['Rules'].map(_format)
0 голосов
/ 14 октября 2018

Попробуйте это

df['Rules'] = df.Rules.apply(lambda x: re.sub("\d+\.\d+", my_func, x))

, где my_func определено ниже:

def my_func(matchobj):
    f = float(matchobj.group(0))
    return "{0:,.2f}".format(f)
0 голосов
/ 14 октября 2018

Это может быть полезно:

if len("%0.f" % floating.number) >= 5:
    print ('do something') 
...