如何使用Python Pandas获取字符串中的第一个和最后一个(变量)字符



我们有这个:

def get_prices():
prices = pd.read_json("https://api.binance.com/api/v1/ticker/allPrices")
prices_df = pd.DataFrame(prices)
prices_df.columns = ["Price","Symbol"]
prices_df = prices_df.set_index("Symbol") 
prices_df["Asset"] = "??"
prices_df["Quote"] = "??"
return prices_df

这里的"符号"是由"资产"+"报价"符号组成的一对,没有任何分隔。更难的是,"资产"one_answers"报价"的长度不同。示例:LTCBTC、BNBUSDT、NEOBTC、QTUMETH(您可以通过运行该功能来检查更多样本(

但我们知道"报价"符号只能是4:"USDT"、"BTC"、"ETH"、"BNB">

那么,我们使用哪些代码来定义数据帧中的每一列("Asset"one_answers"Quote"(呢?

您可以使用的正则表达式是^w+(USDT|BTC|ETH|BNB)$,它匹配以一个或多个单词字符(w+(开头、以USDTBTCETHBNB子字符串之一结尾的字符串。但是,您需要对其进行调整,以便与Pandas一起使用。

您可以使用str.extract通过用捕获圆括号包装相应的模式部分来用正确的值填充列:

prices_df["Asset"] = prices_df["Symbol"].str.extract(r'^(w+)(?:USDT|BTC|ETH|BNB)$', expand=False).fillna('')
prices_df["Quote"] = prices_df["Symbol"].str.extract(r'^w+(USDT|BTC|ETH|BNB)$', expand=False).fillna('') 

您也可以使用命名的捕获组str.extract值并创建相应的列:

prices_df = prices_df.join(prices_df['Symbol'].str.extract(r'^(?P<Asset>w+)(?P<Quote>USDT|BTC|ETH|BNB)$', expand=True))

Pandas演示代码:

import pandas as pd
df = pd.DataFrame({'Symbol':['LTCBTC','BNBUSDT','NEOBTC','QTUMETH']})
df = df.join(df['Symbol'].str.extract(r'^(?P<Asset>w+)(?P<Quote>USDT|BTC|ETH|BNB)$', expand=True))

输出:

>>> df
Symbol Asset Quote
0   LTCBTC   LTC   BTC
1  BNBUSDT   BNB  USDT
2   NEOBTC   NEO   BTC
3  QTUMETH  QTUM   ETH

最新更新