【问题标题】:Replace the value inside a csv column by value inside parentheses of the same column using python pandas使用python pandas将csv列内的值替换为同一列括号内的值
【发布时间】:2019-04-15 11:46:16
【问题描述】:

我得到了以下带有示例数据的 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 使用正则表达式。也许有更聪明的方法来解决我的问题。

【问题讨论】:

    标签: python python-3.x pandas csv dataframe


    【解决方案1】:

    使用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)
    

    【讨论】:

    • 谢谢,这会替换列中的所有行并将新列添加回测试文件吗?
    • @Yoni - 已编辑答案。
    【解决方案2】:

    您可以执行一些操作,例如用空字符串替换所有字母数字值以获得浮点值,反之则获得预测。

    import pandas as pd
    
    df = pd.DataFrame({'ID': [1,2,3,4], 'SIFT': ['tolerated(0.82)', 'tolerated(0.85)', 'tolerated(0.25)', 'dedicated(0.5)']})
    df['SIFT_formatted'] = df.SIFT.str.replace('[^0-9.]', '', regex=True).astype(float)
    df['SIFT_prediction'] = df.SIFT.str.replace('[^a-zA-Z]', '', regex=True)
    df
    

    会给你:

        ID  SIFT            SIFT_formatted  SIFT_prediction
    0   1   tolerated(0.82) 0.82             tolerated
    1   2   tolerated(0.85) 0.85             tolerated
    2   3   tolerated(0.25) 0.25             tolerated
    3   4   dedicated(0.5)  0.50             dedicated
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-24
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多