невозможно заменить пробелы тире в python с помощью string.replace(» «, «_»)

#python #pandas

Вопрос:

Вот мой код:

 import pandas as pd
import requests

url = "https://www.coingecko.com/en/coins/recently_added?page=1"
df = pd.read_html(requests.get(url).text, flavor="bs4")
df = pd.concat(df).drop(["Unnamed: 0", "Unnamed: 1"], axis=1)
df.to_csv("your_table.csv", index=False)
names = df["Coin"].str.rsplit(n=2).str[0].str.lower()
coins=names.replace(" ", "-")
print(coins)
 

Печать все еще печатает монеты с пробелами в их названиях. Я хочу заменить пробелы тире (-). Может кто-нибудь, пожалуйста, помочь

Комментарии:

1. df['coin'].str.replace(" ", "-") будет работать. pandas.pydata.org/pandas-docs/stable/reference/api/…

2. Не могли бы вы также поделиться примером вывода и ожидаемыми результатами

3. Попробуйте coins=names.str.replace(" ", "-") , но Алок прав, вместо того, чтобы показывать весь ваш фрагмент, вы должны указать нам значение names (или его часть). Это помогает сузить круг проблем

Ответ №1:

Вы можете добавить параметр regex=True , чтобы он работал:

 coins = names.replace(" ", "-", regex=True)
 

Причина в том, что для .replace() функции она ищет точное совпадение при замене строк без regex=True (по умолчанию regex=False ):

Официальный документ::

str: строка, точно соответствующая to_replace, будет заменена значением

регулярное выражение: регулярные выражения, соответствующие параметру _replace, будут заменены значением

Поэтому, если заменяемые строки не содержат ровно один пробел (без других символов), заменяемая строка не будет соответствовать. Следовательно, никакого результата с кодом без regex=True .


В качестве альтернативы вы также можете использовать .str.replace() вместо .replace() :

 coins = names.str.replace(" ", "-")
 

.str.replace() не требует точного совпадения и совпадения для частичной строки независимо от того, является ли regex=True или regex=False .

Результат:

 print(coins)


0                              safebreastinu
1     unicly-bored-ape-yacht-club-collection
2                                 bundle-dao
3                                   shibamax
4                                      swapp
                       ...                  
95                        apollo-space-token
96                  futurov-governance-token
97                              safemoon-inu
98                                         x
99                           black-kishu-inu
Name: Coin, Length: 100, dtype: object
 

Комментарии:

1. Вы также знаете, почему regex=True работает только в этом случае?

2. Панды немного сбивают с толку в этой области, согласно моим наблюдениям. Иногда нам нужна необработанная строка для цитирования строк. Иногда заменяющая часть не нужна. Я думаю, что внутренне Панды сделали некоторое предположение о природе персонажей.

3. @Ank См. мое редактирование выше, в котором объясняется, почему regex=True это работает.