首页 > 解决方案 > 迭代熊猫数据框

问题描述

我有两个 csv 文件。文件 1 看起来像这样: 文件 1

文件 2 看起来像这样:file2

我需要编写一个脚本(我正在使用 pandas 数据框),每次 Brewer 和 Microbrewers Licensees 名称出现在 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"

标签: pythonpandascsvjupyter-notebook

解决方案


正如我所理解的,CraftBeverageData.csv 中的Brewer和 Microbrewers Licensees列 已作为预期结果填充,但实际上应该填充数据,基于 CraftBeverageData.csv 中Name列的存在以及另一个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', '')

推荐阅读