Избавление от указанного c символа в строке в столбце Pandas ' - PullRequest
1 голос
/ 11 апреля 2020

Я работаю с большим набором данных (более 2 миллионов строк × 10 столбцов), в котором есть столбец цен. Значения форматируются, включая разделитель тысяч точек (например, 1.000), а также используются точки для разделения десятичных знаков (например, 3.000.75 вместо 3000,75).

Я хочу отформатировать столбец как float, но эти 2 точки в значении вызывают у меня головную боль.

Как правило, и если предположить, что для простоты не существует числа свыше 1.000.000, я бы сделайте что-то вроде этого

for i in range (0,len(df)):
    cell=str(df.iloc[i]['price'])
    if cell.count(".")==2:
        cell=cell.split(".")[0] + cell.split(".")[1] + '.' + cell.split(".")[2]

И тогда да, отформатируйте столбец как float.

Но я знаю, что это далеко не оптимально (for l oop).

Как я могу использовать силу pandas, чтобы избежать for здесь?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 11 апреля 2020

Как предложил Минхо, удалите их с помощью регулярного выражения. Простой способ кодирования и чтения - использовать \D, что означает все нецифровые символы:

regex = r'\D'
df.price = df.price.str.replace(regex, '').astype(float)
0 голосов
/ 11 апреля 2020

В вашем случае у точки есть сомнение в том, что когда ее удалять, а когда точку следует рассматривать как десятичную точку. Мое решение этой проблемы состоит в том, чтобы удалить все точки, затем поставить после тысячи и оставить десятичную точку как есть. Следующий код может помочь вам.

cell = df['price']
cell = cell.astype('str')

def func(val):
    ret = ''
    for i in range(len(val)):
        if val[i] != '.' or i%4 != 0:
            ret += val[i]       

    return ret

output = pd.Series(map(func,cell))

output = output.astype('float')
print(output)

Вы можете написать мне, если столкнетесь с какой-либо другой проблемой.

0 голосов
/ 11 апреля 2020

Вы можете попробовать что-то вроде этого:

df.price.str.replace(r'(\.)([0-9]{1,2})$', ',\\2')

Возможно, вам придется поиграть с частью регулярного выражения, но эта функция - способ go.

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