python - 迭代熊猫数据框
问题描述
我有两个 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"
解决方案
正如我所理解的,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', '')
推荐阅读
- c# - 不可见的DataGridView行在TabControl的几个TabPages中可见
- chart.js - 是否可以为 Chart.js 中的每个数据集设置刻度步长?
- html - 如何创建一侧高于另一侧的行
- node.js - 将所有其他请求重定向到索引页面
- c++11 - 如何使用 SFINAE 启用转换运算符的显式隐性?
- python - terraform 输出文件没有状态选项
- docker - 是否可以在 Dockerfile 中获取 docker 引擎的架构?
- eclipse - 不想解决 Maven Java EE 配置问题
- sql - 在计算中排除周末
- amazon-web-services - AWS 环境中 Informatica BDM 的调度程序