繁体   English   中英

在 Pandas 数据框列中拆分元组中的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM