Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas映射lambda函数的不区分大小写字典_Python_Python 2.7_Pandas_Lambda - Fatal编程技术网

Python Pandas映射lambda函数的不区分大小写字典

Python Pandas映射lambda函数的不区分大小写字典,python,python-2.7,pandas,lambda,Python,Python 2.7,Pandas,Lambda,下面,我在函数中使用lambda x:将值映射到pandas列(如果它们出现在字典基准中) 在该示例中,符号“GOOG”被映射为“Google”到列“全名” 我的问题是:如何根据dict进行不区分大小写的检查?例如,“Aapl”变成了“Apple”,即使“Aapl”在dict中 import pandas as pd import re df = pd.read_csv(file.csv, delimiter=",") df = pd.DataFrame(["LONG GOOG VON", "

下面,我在函数中使用
lambda x:
值映射到
pandas
列(如果它们出现在字典
基准中)

在该示例中,符号
“GOOG”
被映射为
“Google”
到列
“全名”

我的问题是:如何根据dict进行不区分大小写的检查?例如,
“Aapl”
变成了
“Apple”
,即使
“Aapl”
在dict中

import pandas as pd
import re

df = pd.read_csv(file.csv, delimiter=",")
df = pd.DataFrame(["LONG GOOG VON", "Long Aapl X4 VON"], columns=["symbol"])

benchmarks = {"GOOG": "Google", "AAPL": "Apple"}
match = re.compile(r"\s(\S+)\s")

def f(value):
    f1 = lambda x: benchmarks[match.findall(x)[0]] if match.findall(x)[0] in benchmarks else ""
    stuff = f1(value)
    #stuff done here is omitted
    return stuff

df["full_name"] = df["symbol"].map(lambda x:f(x))

编译匹配时使用
re.IGNORECASE
,然后将匹配结果转换为字典的大写

import re
a = ["LONG GOOG VON", "Long Aapl X4 VON", 'no matches here']
match = re.compile(r"\s(\S+)\s", re.IGNORECASE)
benchmarks = {"GOOG": "Google", "AAPL": "Apple"}
for element in a:
    s = match.search(element)
    if s:
        print(benchmarks.get(s.group(1).upper(), ''))
结果:

Google
Apple

怎么样
flags=re.ignorecase
?此外,您可以考虑保存正则表达式搜索结果,而不是多次运行。如果lambda是函数中唯一的东西,为什么还要它呢?该函数甚至不返回任何内容。@TigerhawkT3,根据pandas文档,它应该与
findall
一起工作,但我一定是做错了,因为当我以
findall(x,flags=re.IGNORECASE)的形式输入时,它说
“flags是该函数的无效关键字参数”
@TigerhawkT3这是完整代码的一部分。返回在别处进行。对于已编译的表达式,您必须在编译时而不是在搜索时放入标志,例如
re.compile(r“\s(\s+)\s”,flags=re.IGNORECASE)
。啊,是的,我也尝试过。对
symbol
中的单词进行了正则表达式匹配,但没有使用字典进行翻译。谢谢,我来看看这个。但我不确定这是否适用于索引列的方式(对于
a=
)。另外,我可以在lambda函数中使用
s
替代
x
s
只是一种避免多次正则表达式搜索字符串的方法。您的
lambda
x
相当于正在搜索的当前字符串
元素。