【问题标题】:How can I make a for loop that uses entire string instead of just one element如何制作一个使用整个字符串而不是一个元素的 for 循环
【发布时间】:2021-12-23 05:22:16
【问题描述】:

我有一个来自数据框的列表

print(crypto)

              Ticker       Site                             Date
0           Dogezilla-(DOGEZILLA)-    Hotbit   Fri, 29 Oct 2021 11:19:14 +0000
1                    Epanus-(EPS)-    Hotbit   Fri, 29 Oct 2021 10:48:16 +0000
2           Gods-Unchained-(GODS)-      OKEX   Fri, 29 Oct 2021 08:43:12 +0000
3                       LIQ-(LIQ)-      OKEX   Fri, 29 Oct 2021 08:33:13 +0000
4              Samoyedcoin-(SAMO)-      OKEX   Fri, 29 Oct 2021 07:33:11 +0000
5                GameZone-(GZONE)-      OKEX   Fri, 29 Oct 2021 07:23:11 +0000
6                   Aurory-(AURY)-    Kucoin   Fri, 29 Oct 2021 06:53:12 +0000
7             BASIC-Token-(BASIC)-    Kucoin   Fri, 29 Oct 2021 06:43:15 +0000
8                   Exeedme-(XED)-    Kucoin   Fri, 29 Oct 2021 06:38:12 +0000
9                 Metahero-(HERO)-    Kucoin   Fri, 29 Oct 2021 06:23:11 +0000

名单是

Tick = list(crypto['Ticker'])
Tick = re.sub(r'-\(.*?\)-','', str(Tick))


['Dogezilla', 'Epanus', 'Gods-Unchained', 'LIQ', 'Samoyedcoin', 'GameZone', 'Aurory', 'BASIC-Token', 'Exeedme', 'Metahero', 'Smart-Valley', 'Dollar-Factory-Finance', 'YDragon', 'Sushi', 'YooShi', 'Gogeta-Inu', 'Songbird', 'OmiseGO', 'Synthetix-Network-Token', 'Sushi', 'PancakeSwap', 'SHIBA-INU', 'Axie-Infinity-Shards']

如果我创建一个 for 循环说类似

[print(item) for item in Tick]

它会给出一个字母一个字母的输出

[
'
D
o
g
e
z
i
l
l
a
'
,
 
'
E
p
a
n
u
s
'

我想做的是创建一个看起来像这样的 for 循环

[cg.get_price(ids=item, vs_currencies='usd') for item in Tick]

但是,这只是逐字破坏功能。因此,如果我想要一个函数将列表中的每个字符串放入 ids 输入中。

【问题讨论】:

  • 听起来crypto["Ticker"] 是一个以字符串开头的字符串,您将其转换为字符列表,然后处理该列表的字符串表示形式。如果没有看到您的原始数据,就很难提供帮助。
  • @AKX 这里我将使用数据框进行编辑
  • 当你说for item in Ticker——你想迭代什么?
  • @JoshuaVoskamp 如果这就是你的意思,我想遍历每个字符串。例如,“Epanus”将是 for 循环的输入。然后我希望循环进入'ids = item'

标签: python string list for-loop jupyter-notebook


【解决方案1】:

编辑:使用 AKX 答案中的代码,并在此基础上进行构建:

crypto['Ticker'] = crypto['Ticker'].str.replace(r'-\(.*?\)-', '', regex=True)
crypto['Price'] = crypto['Ticker'].transform(lambda item: cg.get_price(ids=item, vs_currencies='usd'))

我认为您的代码没有按照您的意愿执行操作,因为您在执行 str(Tick) 时将 Ticklist)转换为 str。而不是

Tick = list(crypto['Ticker'])
Tick = re.sub(r'-\(.*?\)-','', str(Tick))

Tick = [i.split('-(')[0] for i in crypto['Ticker']]

并对其进行迭代。

【讨论】:

  • 谢谢,我可能需要一个小时才能在数据框中恢复价格哈哈
  • @Lonesomewhenuraround 尤其是。使用数据框时,可能很想将数据取出(例如放入列表中),对其进行迭代,然后将其放回数据框 - 但是(几乎?)总是 (更好!)在框架内不使用for 循环
【解决方案2】:

正确 - 鉴于 crypto 是 Pandas 数据框,crypto['Ticker'] 指的是其中的一个系列,您可能只想

crypto['Ticker'] = crypto['Ticker'].replace(r'-\(.*?\)-', '', regex=True)

就地修复这些股票代码。

【讨论】:

  • 可能需要做crypto['Ticker'].str.replace...
  • 成功了,谢谢!我不认为我可以在数据框上使用正则表达式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2019-10-13
  • 2012-07-20
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多