迭代熊猫数据框

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 LicenseesCraftBeverageData.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中,它将是创建的。否则它之前的内容将被覆盖。

以上是关于迭代熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

迭代熊猫数据框

如何迭代熊猫数据框列中的元素?

如何在熊猫中迭代数据框时保留数据类型?

按日期迭代熊猫数据框的正确方法

涉及即时数据框对象的嵌套熊猫迭代

如何迭代熊猫数据框的列以运行回归