[英]Splitting strings in tuples within a pandas dataframe column
我有一个 Pandas 数据框,其中一列包含元组:
p = pd.DataFrame({"sentence" : [("A.Hi", "B.My", "C.Friend"), \
("AA.How", "BB.Are", "CC.You")]})
我想在 punctuation 上拆分元组中的每个字符串.
, 取 split/string 的第二部分,看看有多少匹配的字符串列表:
p["tmp"] = p["sentence"].apply(lambda x: [i.split(".")[1] for i in x])
p["tmp"].apply(lambda x: [True if len(set(x).intersection(set(["Hi", "My"])))>0 else False])
这按预期工作,但我的数据帧有超过 100k 行 - 并且apply
在这些大小下似乎效率不高。 有没有办法优化/矢量化上述代码?
使用嵌套列表和集合理解,并在测试中将集合转换为bool
s - 空set
返回False
:
s = set(["Hi", "My"])
p["tmp"] = [bool(set(i.split(".")[1] for i in x).intersection(s)) for x in p["sentence"]]
print (p)
sentence tmp
0 (A.Hi, B.My, C.Friend) True
1 (AA.How, BB.Are, CC.You) False
编辑:
如果拆分后只有 1 或 2 个长度值,您可以通过索引[-1]
来选择最后一个值:
p = pd.DataFrame({"sentence" : [("A.Hi", "B.My", "C.Friend"), \
("AA.How", "BB.Are", "You")]})
print (p)
sentence
0 (A.Hi, B.My, C.Friend)
1 (AA.How, BB.Are, You)
s = set(["Hi", "My"])
p["tmp"] = [bool(set(i.split(".")[-1] for i in x).intersection(s)) for x in p["sentence"]]
print (p)
sentence tmp
0 (A.Hi, B.My, C.Friend) True
1 (AA.How, BB.Are, You) False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.