我正在创建一个脚本,该脚本采用一个 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
两者都有 rs
和 del
.因为我正在申请 rs
首先和del
第二,该行被标记为 deletion
.您可以选择交换订单来决定是否要保留值(value)为dbsnp
或 deletion
.代码处理所有列,而不管 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/