Pandas:根据指定Strain筛选对应Contig与Homology的问题
问题修正:按指定Strain输出Contig对应的Homology值
问题根源
当前代码存在三个核心问题:
- CSV分隔符错误:原文件用空格分隔列,但代码指定
sep=";",导致所有内容被读入同一列,后续过滤逻辑完全失效; - 过滤逻辑不严谨:提取homology时仅匹配contig值,未同时限定strain,因此会返回所有菌株中该contig的结果,而非目标菌株的对应值;
- 参数格式错误:调用函数时
1A42未加引号,会被当作变量而非字符串处理,直接引发报错。
修正后的代码
import pandas as pd def myfunction(strain, csv_path): # 用正则匹配任意数量空格作为分隔符,正确解析CSV列 h_df = pd.read_csv(csv_path, sep="\s+", dtype='unicode', on_bad_lines='skip') # 直接筛选目标菌株的所有行,确保contig与homology的对应关系精准 strain_data = h_df[h_df['strain'] == strain] # 遍历输出每一组contig和homology for _, row in strain_data.iterrows(): print(row['contig'], row['homology']) # 注意:strain需传入字符串格式,csv_path替换为你的实际文件路径 myfunction('1A42', 'your_csv_file.csv')
简化输出版(表格形式)
如果需要更清晰的表格输出,可以用以下写法:
import pandas as pd def myfunction(strain, csv_path): h_df = pd.read_csv(csv_path, sep="\s+", dtype='unicode', on_bad_lines='skip') # 只保留需要的两列并输出 result = strain_data = h_df[h_df['strain'] == strain][['contig', 'homology']] print(result.to_string(index=False)) myfunction('1A42', 'your_csv_file.csv')
关键优化点
- 分隔符修正:
sep="\s+"适配原CSV的空格分隔格式,正确拆分三列数据; - 精准筛选:通过
h_df['strain'] == strain直接锁定目标菌株的行,避免跨菌株匹配; - 逻辑简化:无需先提取contig再循环查询,直接遍历筛选后的结果,代码更高效简洁。
内容的提问来源于stack exchange,提问作者Iacopo Passeri
相关产品推荐
相关产品推荐

