首页 > 解决方案 > 使用python pandas将csv列内的值替换为同一列括号内的值

问题描述

我得到了以下带有示例数据的 csv 文件: 带有样本数据的 csv 文件的一小部分

现在我想用这些列括号内的数据替换列 'SIFT' 和 'PolyPhen' 值。因此,对于第 1 行,SIFT 值将替换为 0.82,对于第 2 行,SIFT 值将替换为 0.85。我还想要括号前的部分,容忍/有害,在一个名为“SIFT_prediction”的新列中。

这是我到目前为止所尝试的:

import pandas as pd
import re

testfile = 'test_sift_columns.csv'
df = pd.read_csv(testfile)  
df['SIFT'].re.search(r'\((.*?)\)',s).group(1)

此代码将获取 SIFT 列括号内的所有内容。但这并不能取代任何东西。我可能需要一个 for 循环来读取和替换每一行,但我不知道如何正确执行。此外,我不确定是否需要对 pandas 使用正则表达式。也许有更聪明的方法来解决我的问题。

标签: pythonpython-3.xpandascsvdataframe

解决方案


使用Series.str.extract

df = pd.DataFrame({'SIFT':['tol(0.82)','tol(0.85)','tol(1.42)'],
                   'PolyPhen':['beg(0)','beg(0)','beg(0)']})

pat = r'(.*?)\((.*?)\)'
df[['SIFT_prediction','SIFT']] = df['SIFT'].str.extract(pat)
df[['PolyPhen_prediction','PolyPhen']] = df['PolyPhen'].str.extract(pat)

print(df)
  SIFT_prediction  SIFT PolyPhen_prediction PolyPhen
0             tol  0.82                 beg        0
1             tol  0.85                 beg        0
2             tol  1.42                 beg        0

选择:

df[['SIFT_prediction','SIFT']] = df['SIFT'].str.rstrip(')').str.split('(', expand=True)
df[['PolyPhen_prediction','PolyPhen']] = df['PolyPhen'].str.rstrip(')').str.split('(', expand=True)

推荐阅读