我想在python数据框架中搜索stings列表

我想在python数据框架中搜索stings列表,python,pandas,csv,Python,Pandas,Csv,我的CSV文件中有一列,我想在其中搜索字符串列表并添加一个0/1的新列,如果列表中存在任何值,则为1或0 我有两份清单: UC、iCD、慢性病、慢性病、IBD、溃疡性 结肠炎、PMC、P80、慢性病 供者,健康,非IBD,对照组 我的专栏也有NA值 到目前为止,我只是在尝试匹配刺的列表: import csv import pandas as pd with open('biosample.csv') as csvfile: df = pd.read_csv('biosample.cs

我的CSV文件中有一列,我想在其中搜索字符串列表并添加一个0/1的新列,如果列表中存在任何值,则为1或0

我有两份清单:

  • UC、iCD、慢性病、慢性病、IBD、溃疡性 结肠炎、PMC、P80、慢性病
  • 供者,健康,非IBD,对照组
  • 我的专栏也有NA值

    到目前为止,我只是在尝试匹配刺的列表:

    import csv
    import pandas as pd
    
    with open('biosample.csv') as csvfile:
        df = pd.read_csv('biosample.csv', delimiter = ',', dtype= 'unicode', 
        error_bad_lines=False)
        df1 = df.set_index(['Sample_Info'])
    print(df1.loc['UC''iCD', 'Chrons disease', 'Chrons', 'IBD', 'Ulcerative 
    colitis', 'PMC', 'P80', 'Chron disease])
    
    对于这一点,我得到了多个错误,比如in有有效类型错误,in有有效类型错误


    我已经通过已经张贴的问题,但在没有这种错误被提及

    从csv文件加载数据帧时,不需要使用csv模块

    正如您提到的,新列应该添加到dataframe

    用于检查来自第一个列表的值的代码可能如下所示:

    import pandas as pd
    
    list1 = ['UC''iCD', 'Chrons disease', 'Chrons', 'IBD', 'Ulcerative colitis', 'PMC', 'P80', 'Chron disease']
    list2 = ['Donor', 'healthy', 'non-IBD', 'Control']
    
    def check_list(value, list2check):
        if any(map(lambda x: x in value, list2check))
            return 1
        return 0
    
    df = pd.read_csv('biosample.csv', delimiter = ',', dtype= 'unicode', error_bad_lines=False)
    df['sample_from_list1'] = df['Sample_Info'].apply(lambda v: check_list(v, list1))
    
    演示:

    PS您根本不需要使用CSV模块:

    df = pd.read_csv(r'/path/to/biosample.csv', delimiter = ',', 
                     encoding='unicode', error_bad_lines=False, 
                     index_col='Sample_Info')
    

    嗨,MaxU,这对我没有帮助,因为我的csv表中的列有如下值:HC,HC UC,UC CC,CC UC,UC UC,UC LC,LC CD,ICD\r无IBS,无,无IBD供体无IBS,是,溃疡性结肠炎无IBS,是,溃疡性结肠炎无IBS,无,无IBD NA缓解、克罗恩病、病理性NA缓解、溃疡性结肠炎、病理性NA缓解、溃疡性结肠炎、,pathological@K.S,你能发布一个小的可复制数据集和你想要的数据集吗。请阅读并编辑相应的文章。我的专栏包含多个逗号分隔的字符串。df只取第一个值。例如,细胞JN1的值为“UC,UC”,JN2-“缓解,无IBS,无IBD”JN3-“健康,正常”,JN4-“慢性病,IBD”。我将这些值放在多个列中,并使用以下公式组合在一个列中:new=df1.apply(lambda x:','。join(x.dropna()),axis=1)现在我想要一个新的列,它对应的Chrons disease值为0,health值为1。Hi MaxU这对我没有帮助,因为我的csv表中的列有如下值:Sample\u InfoHC,HC UC,UC CC,CC UC,UC UC,UC LC,LC CD,ICD\r无IBS,无,无IBD供体无IBS,是,溃疡性结肠炎无IBS,是,溃疡性结肠炎无IBS,无,无IBD NA缓解,克罗恩病,病理性NA缓解,溃疡性结肠炎,病理性NA缓解,溃疡性结肠炎,病理性逻辑的
    df = pd.read_csv(r'/path/to/biosample.csv', delimiter = ',', 
                     encoding='unicode', error_bad_lines=False, 
                     index_col='Sample_Info')