python - pandas findall() 可以返回 str 而不是 list 吗?

标签 python regex pandas

我有一个包含很多变量的 pandas 数据框:

df.columns
Out[0]: 
Index(['COUNADU_SOIL_P_NUMBER_16_DA_B_VE_count_nr_lesion_PRATZE',
       'COUNEGG_SOIL_P_NUMBER_50_DA_B_VT_count_nr_lesion_PRATZE',
       'COUNJUV_SOIL_P_NUMBER_128_DA_B_V6_count_nr_lesion_PRATZE',
       'COUNADU_SOIL_P_SAUDPC_150_DA_B_V6_lesion_saudpc_PRATZE',
       'CONTRO_SOIL_P_pUNCK_150_DA_B_V6_lesion_p_control_PRATZE',
       'COUNJUV_SOIL_P_p_0_100_16_DA_B_V6_lesion_incidence_PRATZE',
       'COUNADU_SOIL_P_p_0_100_50_DA_B_VT_lesion_incidence_PRATZE',
       'COUNEGG_SOIL_P_p_0_100_128_DA_B_VT_lesion_incidence_PRATZE',
       'COUNEGG_SOIL_P_NUMBER_50_DA_B_V6_count_nr_spiral_HELYSP',
       'COUNJUV_SOIL_P_NUMBER_128_DA_B_V10_count_nr_spiral_HELYSP', # and so on

我只想保留数字后跟 DA,所以第一列是 16_DA。我一直在使用 pandas 函数 findall():

df.columns.str.findall(r'[0-9]*\_DA')
Out[595]: 
Index([ ['16_DA'],  ['50_DA'], ['128_DA'], ['150_DA'], ['150_DA'],
        ['16_DA'],  ['50_DA'], ['128_DA'],  ['50_DA'], ['128_DA'], ['150_DA'],
        ['150_DA'],  ['50_DA'], ['128_DA'],

但这会返回一个我想避免的列表,所以我最终得到一个如下所示的列索引:

df.columns
Out[595]: 
Index('16_DA',  '50_DA', '128_DA', '150_DA', '150_DA',
      '16_DA',  '50_DA', '128_DA',  '50_DA', '128_DA', '150_DA',

有没有更流畅的方法来做到这一点?

最佳答案

您可以使用 .str.join(", ") 用逗号和空格连接所有找到的匹配项:

df.columns.str.findall(r'\d+_DA').str.join(", ")

或者,只需使用 str.extract 获取第一个匹配项:

df.columns.str.extract(r'(\d+_DA)', expand=False)

关于python - pandas findall() 可以返回 str 而不是 list 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70449278/

相关文章:

python - pd.Series of Lists - 检查列表中的元素

python - super(MyObject, self).__init__() 在类 MyObject __init__() 函数中做什么?

python - 从字典创建 .txt 文件

python - 关闭 tkinter GUI 而不终止应用程序

javascript - Typescript 正则表达式扩展方法

java - 匹配字符串第一次出现的正则表达式是匹配最后一次出现的

regex - 如何使用正则表达式删除具有特定变量的特定行

python - 复制参数与 Series.Copy()

python - Pandas 数据框 - 删除异常值

python - 如何修复 - 导入 keras 时出现 ImportError : DLL load failed,