python - 使用字典和正则表达式重命名列名

标签 python regex pandas string rename

我有一个名为 mcmc_samples 的 DataFrame,它包含多个变量的 Markov-Chain-Monte-Carlo 样本

<表类="s-表"> <头> 偏差 K_1[1,1] K_1[1,2] K_1[1,3] K_1[2,1] K_1[2,2] K_1[2,3] <正文> 0.2 0.4 0.6 0.1 0.3 0.9 0.8 ... ... ... ... ... ... ...

列名称由级别 (K_1)、变量(逗号前括号中的第一个数字)和类别(逗号后括号中的第二个数字)组成。

我尝试重命名列名,使括号中的数字更有意义。为此,我想使用以下词典。

dict_var = {1: "variable_1", 2: "variable_2"}
dict_categ  = {1: "item_1, 2: "item_2", 3: "item_3"}

我尝试使用正则表达式替换字符串

mcmc_samples.columns = mcmc_samples.columns.str.replace(r"(?<=,)(.*?)(?=\])", 
mcmc_samples.columns.str.extract(r"(?<=,)(.*?)(?=\])")[0].map(dict_categ), regex=True)

但这给了我以下错误:

TypeError: repl 必须是字符串或可调用

最佳答案

假设字典包含全面的数据,并且您要匹配的所有数字在字典中都有相应的键,您可以使用

mcmc_samples.columns = mcmc_samples.columns.str.replace(
    r"(?<=\[)(\d+),(\d+)(?=])",
    lambda x: f"{dict_var[int(x.group(1))]},{dict_categ[int(x.group(2))]}",
    regex=True)

参见 regex demo . 详细信息:

  • (?<=\[) - 就在前面,必须有一个 [字符
  • (\d+) - 第 1 组:一个或多个数字
  • , - 一个逗号
  • (\d+) - 第 2 组:一个或多个数字
  • (?=]) - 紧接着,必须有一个 ]字符。

如果你需要返回匹配的数字,如果它不在你可以使用的字典中

def repl(x):
    result = []
    if int(x.group(1)) in dict_var:
        result.append(dict_var[int(x.group(1))])
    else:
        result.append(x.group(1))
    if int(x.group(2)) in dict_categ:
        result.append(dict_categ[int(x.group(2))])
    else:
        result.append(x.group(2))
    return ",".join(result)

mcmc_samples.columns = mcmc_samples.columns.str.replace(
    r"(?<=\[)(\d+),(\d+)(?=])",
    lambda x: repl(x),
    regex=True)

关于python - 使用字典和正则表达式重命名列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67921802/

相关文章:

python - 从列表理解创建有序字典?

java - 正则表达式除某些字符和最大数字序列之外的任何字母数字字符

python - 正则表达式单词在字符串中出现两次

javascript - 如何使用javascript中的正则表达式从颜色代码中删除 "#"?

python - Google BigQuery Schema 冲突(pyarrow 错误)与使用 load_table_from_dataframe 的数字数据类型

Python滚动期返回

python - 溢出错误: size does not fit in an int

python - 如何从 PyQt5 中的第二个文件访问第一个文件方法?

python - 为什么 Keras 的评估生成器和评估对相同数据报告的精度不同?

python - 两次使用 apply() 创建新列会导致覆盖新列