【问题标题】:iterating through a dataframe column to see if individual cell value is in a list of file paths遍历数据框列以查看单个单元格值是否在文件路径列表中
【发布时间】:2019-07-19 12:56:34
【问题描述】:

我有一个 shapefile 路径列表 (sf_list),我正在使用嵌套的 for 循环遍历列表和数据框 (df),以查看该数据框的列(名称)的行中的值是否在该路径中,如果是,则将该列表值附加到数据框的新列(sf_path)中的该数据框行。这就是我现在拥有的:

for sf in sf_list:
    for row in df.iterrows():
        df.loc[df['name'].isin(sf),'sf_path'] = [sf]

脚本运行但新列为空。该列表填充了我需要的所有路径,并且该数据框的列包含特定文本,这些文本位于我去填充新列的该行的路径中。任何方向表示赞赏。


更新:

现在我有:

for sf in sf_list:  
    for row in dlrules_df.iterrows():  
        dlrules_df.loc[dlrules_df['dl_foldername'] in sf, 'sf_path'] = sf

返回错误:

TypeError: 'in <string>' requires string as left operand, not Series

【问题讨论】:

  • 我想您可能对isin 的使用产生了错误的印象。您可能想要做的是检查“名称”列的值是否与路径列表相对应。如果找到,您将路径附加到新的“sf_path”列,对吗?你可能想改用in
  • 更新:现在我有:for sf in sf_list: for row in dlrules_df.iterrows(): dlrules_df.loc[dlrules_df['dl_foldername'] in sf, 'sf_path'] = sf error returned : TypeError: 'in' 需要字符串作为左操作数,而不是 Series

标签: pandas list loops


【解决方案1】:

你可以试试这个吗? apply 不推荐,但它已成为我的习惯。想花更多的时间给你一个更有效的解决方案,但是这里已经是睡觉时间了,这从我的脑海中浮现出来。

sf = [list_of_folder_paths]
dlrules_df.loc[:, 'dl_foldername'].apply(lambda x: sf[sf.index(x)] if x in sf else None)

PS:未经测试,所以它可能会在某处损坏,但我希望它能给你一些想法。

【讨论】:

  • 这样运行,但它不会创建一个新列(“sf_path”),将文件夹路径附加到与“dl_foldername”中的子字符串匹配的数据帧
  • @MattSloane 如果需要,您只需将其分配给一个新列。 dlrules_df['sf_path'] = dlrules_df.loc[:, 'dl_foldername'].apply(lambda x: sf[sf.index(x)] if x in sf else None)
猜你喜欢
  • 2019-08-05
  • 2023-03-12
  • 2019-02-26
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多