python - 在数据框中查找字符串并将新值存储在新列中

标签 python pandas

我正在创建一个脚本,该脚本采用一个 csv 文件,该文件的列组织和列名称未知。但是我知道只有一列包含一些出现 str 'rs' 和 'del' 的值。
我需要创建一个额外的列(称为“类型”)并将“dbsnp”存储在找到“rs”的行中,并在找到“del”的行中存储“删除”。如果未找到 str ,则将列类型中的该行留空。
作为示例,我提供了这个 df:

Data = {'Number': ['Mukul', 'Rohan', 'Mayank', 
                  'Shubham', 'Aakash'], 
          
        'Location': ['Saharsanpur', 'MERrs', 'rsAdela', 
                     'aaaadelaa', 'aaa'], 
          
        'Pay': [25000, 30000, 35000, 40000, 45000]} 
  
df = pd.DataFrame(Data)
print(df)

 Name     Location    Pay
0    Mukul  Saharsanpur  25000
1    Rohan        MERrs  30000
2   Mayank      rsAdela  35000
3  Shubham    aaaadelaa  40000
4   Aakash          aaa  45000
我一直在尝试这样的事情
df["type"] = df["Name"].str.extract("rs")[0] 
# and then do some replace
但我的问题之一是我不知道列的名称和位置。
欲望输出
 Name     Location    Pay       type
0    Mukul  Saharsanpur  25000 dbsnp
1    Rohan        MERrs  30000 dbsnp
2   Mayank      rsAdela  35000 dbsnp
3  Shubham    aaaadelaa  40000 deletion
4   Aakash          aaa  450

下一个 for 循环解决了未知列的问题,但现在我需要解决在值中识别我的 str 的问题。
如何在 if 条件中使用 str.contains("rs") ?
for index, row in df[:3].iterrows():
    for i in range(len(df.columns)): 
        if row[i] == 5:
            print(row.index[i])

最佳答案

你可以在没有循环的情况下做到这一点。这是一个方法。您可以使用 applymap 并搜索所有列。

import pandas as pd
data = {'Number': ['Mukul', 'Rohan', 'Mayank', 
                  'Shubham', 'Aakash'], 
          
        'Location': ['Saharsanpur', 'MERrs', 'rsAdela', 
                     'aaaadelaa', 'aaa'], 
          
        'Pay': [25000, 30000, 35000, 40000, 45000]} 
  
df = pd.DataFrame(data)

df['rs'] = df.astype(str).applymap(lambda x: 'rs' in x).any(1)
df['del'] = df.astype(str).applymap(lambda x: 'del' in x).any(1)

df['type']=''
df.loc[df['rs'] == True, 'type'] = 'dbsnp'
df.loc[df['del'] == True, 'type'] = 'deletion'

df = df.drop(columns=['rs','del'])
print (df)
根据表中数据,rsAdela两者都有 rsdel .因为我正在申请 rs首先和del第二,该行被标记为 deletion .您可以选择交换订单来决定是否要保留值(value)为dbsnpdeletion .
代码处理所有列,而不管 dtype。
上述数据的输出为:
    Number     Location    Pay      type
0    Mukul  Saharsanpur  25000     dbsnp
1    Rohan        MERrs  30000     dbsnp
2   Mayank      rsAdela  35000  deletion
3  Shubham    aaaadelaa  40000  deletion
4   Aakash          aaa  45000          

关于python - 在数据框中查找字符串并将新值存储在新列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65538068/

相关文章:

python - 如何在使用 pandas [Python] 提取 xls 文件后从输出中删除编号

python - Pandas 数据框日期晚了一天

python-3.x - Pandas Group By 和 Get Dummies

python - 出现异常错误 “Exception in thread Thread-13 (most likely raised during interpreter shutdown)”

python - 在python中添加背景图像

python - 为什么 `virtualenv` 找不到 `pkg_resources` ?

python - 如何将 PyDict 对象从 C++ 发送到 Python

python - 左合并两个数据帧并仅在 Pandas 中填充 NaN 值

sql-server - 将在 Python 中创建的 Pandas 数据框插入 SQL Server

python - 井号不显示 Jinja2(编码)