【问题标题】:how to compare string values of dataframe and list of tuples如何比较数据框的字符串值和元组列表
【发布时间】:2020-07-15 11:23:00
【问题描述】:

我想比较元组列表中与数据框中的项目匹配的每个字符串。如果匹配,则将数据框中的单词对应的单词添加到元组中。

我的清单是这样的:

[('nan', 353), ('LEVEL SUBGROUPS', 12), (' SYSTEMS', 9), ('SYSTEMS', 8), (' PARALLEL ALGORITHMS', 7)]

我的数据框的列是:

Index(['subject', 'theme', 'keys'], dtype='object')

我想通过比较元组值和“键”将每个主题映射到元组。

我的一段代码是:

themes=[]
for each in list:
    if each[0]=='nan':
        continue
    else:
        for index,row in df.iterrows():
            if str(row["keys"])==str(each[0]):
                theme_89_93.append(str(row["theme"]))

当我比较字符串值时,它不会检查值,也不会输入 if 语句。请让我知道我做错了什么

【问题讨论】:

  • 实际上,使用您的代码,如果某行类似于row['keys']='SYSTEMS',您将追加row['theme'] 的值两次,因为在列表中有两个值与'SYSTEMS' 匹配:是是有意还是只想匹配列表的唯一值?
  • 如果您考虑接受或投票以奖励帮助过您的人,或者如果有问题您也可以发表评论,那将是一件好事;)@AyushiSharma

标签: python string list dataframe tuples


【解决方案1】:

你可以检查一个项目是否在索引中

each[0] in df.index

如果你想具体测试索引中的键列,你可以这样做。

each[0] in df.index.levels[2]

这也应该比在孔 DataFrame 上迭代更快

【讨论】:

    【解决方案2】:

    IIUC,你可以试试这个,使用pd.Dataframe.isin()

    themes=df[df['key'].isin([i for i in dict(ls).keys() if i!='nan'])].theme.values
    

    或者这个,以防万一你有尾随或前导空格的字符串,(df.valuesls

    themes=df[df['key'].str.strip().isin([i.strip() for i in dict(ls).keys() if i.strip()!='nan'])].theme.values
    

    例子:

    import pandas as pd
    df = pd.DataFrame([(1,'nan'),(3,'SYSTEMS'),(5,'PARALLEL ALGORITHMS')], columns=['theme','key'])
    
    ls=[('nan', 353), ('LEVEL SUBGROUPS', 12), ('SYSTEMS', 9), ('SYSTEMS', 8), ('PARALLEL ALGORITHMS', 7)]
    
    themes=df[df['key'].isin([i for i in dict(ls).keys() if i!='nan'])].theme.values
    

    输出:

    df
       theme                  key
    0      1                  nan
    1      3              SYSTEMS
    2      5  PARALLEL ALGORITHMS
    
    themes
    [3 5]
    

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 2012-08-14
      • 2020-02-19
      • 2015-07-16
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      相关资源
      最近更新 更多