如何在Pandas中提取含字符串、逗号和整数的括号内的字符串
问题:从Pandas DataFrame的元组中提取字符串名称
我正在尝试从包含字符串、逗号和整数的括号(元组)中提取字符串名称。当前我的Pandas DataFrame输出如下:
print(df1) name matches best match best 2 best 3 0 aparna [(aparn, 91), (Pankaj, 67), (arup, 45)] (aparn, 91) (Pankaj, 67) (arup, 45) 1 pankaj [(Pankaj, 100), (aparn, 55), (abc, 30)] (Pankaj, 100) (aparn, 55) (abc, 30) 2 sudhir [(sudhir c, 95), (arup, 22), (aparn, 18)] (sudhir c, 95) (arup, 22) (aparn, 18) 3 Geeku [(Geek, 89), (arup, 22), (Pankaj, 18)] (Geek, 89) (arup, 22) (Pankaj, 18)
期望的DataFrame输出:
print(df1) name matches best match best 2 best 3 0 aparna [(aparn, 91), (Pankaj, 67), (arup, 45)] aparn Pankaj arup 1 pankaj [(Pankaj, 100), (aparn, 55), (abc, 30)] Pankaj aparn abc 2 sudhir [(sudhir c, 95), (arup, 22), (aparn, 18)] sudhir c arup aparn 3 Geeku [(Geek, 89), (arup, 22), (Pankaj, 18)] Geek arup Pankaj
当前生成相关列的代码:
dframe1['best match'] = dframe1['matches'].str[0] #first best match (new column) dframe1['best 2'] = dframe1['matches'].str[1] #2nd best match dframe1['best 3'] = dframe1['matches'].str[2] #3nd best match
尝试过使用str.extract,但不清楚如何仅提取字母组成的部分,特此求助。
解决方案
方法1:直接访问元组的第一个元素
如果matches列中的元素是真实的Python元组,直接取元组的第一个元素即可,这是最高效的方式:
# 提取每个匹配元组的第一个元素(字符串名称) dframe1['best match'] = dframe1['matches'].str[0].str[0] dframe1['best 2'] = dframe1['matches'].str[1].str[0] dframe1['best 3'] = dframe1['matches'].str[2].str[0]
方法2:正则提取(适用于字符串格式的元组)
如果你的best match等列是字符串类型(比如存储的是"(aparn, 91)"这样的文本),用正则表达式提取逗号前的内容:
# 匹配括号内、逗号前的所有字符,去除首尾空格 dframe1['best match'] = dframe1['best match'].str.extract(r'\((.*?),', expand=False).str.strip() dframe1['best 2'] = dframe1['best 2'].str.extract(r'\((.*?),', expand=False).str.strip() dframe1['best 3'] = dframe1['best 3'].str.extract(r'\((.*?),', expand=False).str.strip()
方法3:批量处理(简洁写法)
通过循环和apply批量生成目标列,避免重复代码:
# 定义提取名称的函数 def get_name(tuple_item): return tuple_item[0] # 循环生成3个匹配列 for idx in range(3): col = 'best match' if idx == 0 else f'best {idx+1}' dframe1[col] = dframe1['matches'].str[idx].apply(get_name)
内容的提问来源于stack exchange,提问作者atom
相关产品推荐
相关产品推荐

