迭代熊猫数据框
Posted
技术标签:
【中文标题】迭代熊猫数据框【英文标题】:iterating on pandas dataframes 【发布时间】:2020-05-17 12:45:24 【问题描述】:我有两个 csv 文件。文件 1 看起来像这样: file1
文件 2 如下所示:file2
我需要编写一个脚本(我正在使用 pandas 数据框),每次 Brewer 和 Microbrewers 的被许可方名称出现在 file1 的列中时,都会用“是”填充该列。 如果 Brewer 和 Microbrewers Licensees 不在 file1 上,则添加到 file1 中,包括县和地址(解析 file1 上的每一列)
目前为止:
import pandas as pd
import numpy as np
factories=[]
file1=pd.read_csv("CraftBeverageData.csv")
file2=pd.read_csv("brewers.csv")
beers1 = pd.DataFrame(file1)
for i in beers1["Name"]:
factories.append(i)
for name in brewers["Brewer and Microbrewers Licensees"]:
if name in factories:
beers1["Brewer and Microbrewers Licensees"]="Yes"
【问题讨论】:
嘿@qqqqqqq,尝试将您的数据帧作为代码发布,这样我们更容易为您提供帮助。还有你试过什么?发布你的一些代码 【参考方案1】:据我了解,Brewer 和 Microbrewers Licensees 列 CraftBeverageData.csv 已作为预期结果填充, 但它实际上应该填充数据,基于 Name 列的存在 在 CraftBeverageData.csv 中,第一列在另一个 DataFrame 中。
代码应该如下所示:
# Read DataFrames
beverages = pd.read_csv("CraftBeverageData.csv")
brewers = pd.read_csv("brewers.csv")
# Processing
licNames = brewers['Brewer and Microbrewers Licensees'].values
beverages['Brewer and Microbrewers Licensees'] =\
beverages.Name.apply(lambda name: 'Yes' if name in licNames else '')
我无法测试这段代码,因为您没有提供源数据 以易于复制的形式。
另一个更简洁的解决方案,基于 Numpy(在您阅读了两个 DataFrame 之后):
licNames = brewers['Brewer and Microbrewers Licensees']
beverages['Brewer and Microbrewers Licensees'] =\
np.where(beverages.Name.isin(licNames), 'Yes', '')
【讨论】:
嘿@Valdi_Bo 这实际上有效,谢谢。我以前从未使用过“lambda”。我不知道这是一件事 但是如果不存在,我如何将 Brewer 和 Microbrewers Licensees 添加到饮料数据框中。我如何解析地址部分? 我的代码(两个版本)都包含 beverages['Brewer and Microbrewers Licensees'] = ... 这意味着如果这个列不在DataFrame中,它将是创建的。否则它之前的内容将被覆盖。以上是关于迭代熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章