#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
это работает.