我正在创建一个使用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
。您可以选择交换订单以决定是否要保留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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句