【发布时间】:2015-09-11 19:21:54
【问题描述】:
我正在尝试将此函数的用途从使用 split 改为使用 str.extract(正则表达式)。
def bull_lev(x):
spl = x.rsplit(None, 2)[-2].strip("Xx")
if spl.str.isdigit():
return "+" + spl + "00"
return "+100"
def bear_lev(x):
spl = x.rsplit(None, 2)[-2].strip("Xx")
if spl.str.isdigit():
return "-" + spl + "00"
return "-100"
df["leverage"] = df["name"].map(lambda x: bull_lev(x)
if "BULL" in x else bear_lev(x) if "BEAR" in x else "+100"
我正在使用pandas 处理DataFrame:
import pandas as pd
df = pd.DataFrame(["BULL AXP UN X3 VON", "BEAR ESTOX 12x S"], columns=["name"])
期望的输出:
name leverage
"BULL AXP UN X3 VON" "+300"
"BEAR ESTOX 12x S" "-1200"
"BULL" 的正则表达式尝试错误:
def bull_lev(x):
#spl = x.rsplit(None, 2)[-2].strip("Xx")
spl = x.str.extract(r"(X\d+|\d+X)\s", flags=re.IGNORECASE).strip("x")
if spl.str.isdigit():
return "+" + spl + "00"
return "+100"
df["leverage"] = df["name"].map(lambda x: bull_lev(x)
if "BULL" in x else bear_lev(x) if "BEAR" in x else "+100")
产生错误:
Traceback (most recent call last):
File "toolkit.py", line 128, in <module>
df["leverage"] = df["name"].map(lambda x: bull_lev(x)
File "/Python/Virtual/py2710/lib/python2.7/site-packages/pandas/core/series.py", line 2016, in map
mapped = map_f(values, arg)
File "pandas/src/inference.pyx", line 1061, in pandas.lib.map_infer (pandas/lib.c:58435)
File "toolkit.py", line 129, in <lambda>
if "BULL" in x else bear_lev(x) if "BEAR" in x else "+100")
File "toolkit.py", line 123, in bear_lev
spl = x.str.extract(r"(X\d+|\d+X)\s", flags=re.IGNORECASE).strip("x")
AttributeError: 'str' object has no attribute 'str'
我假设这是由于str.extract 捕获列表而split 直接使用字符串?
【问题讨论】:
标签: python regex python-2.7 pandas