我如何在Python中实现这一点。我知道Excel中有一个vlookup函数,但如果Python中有一个方法,我更喜欢在Python中实现。基本上我的目标是从CSV2列Quantity中获取数据,并根据Bin_Name将数据写入CSV1的Quantity列。脚本不应一次复制所有值,必须通过选择Bin_Name。例如:今天,我想从CSV2的Bin_Name ABCDE中获取数据到CSV1,然后将数据写入CSV1的Quantity列。如果可以的话,我将非常感激,并将从中学到很多东西。非常感谢。
CSV1 CSV2
Bin_Name Quantity Bin_Name Quantity
A A 43
B B 32
C C 28
D D 33
E E 37
F F 38
G G 39
H H 41
4条答案
按热度按时间x8diyxa71#
下面是一种在Python中不使用
1.将两个CSV文件读入两个单独的词典列表,其中每个词典表示CSV文件中的一行。
1.遍历CSV1中的字典列表,对于每个字典,在CSV2中的字典列表中搜索匹配的Bin_Name。
1.如果找到匹配项,则使用CSV2中匹配字典中的Quantity值更新CSV1中字典中的Quantity值。
1.将CSV1中更新的词典列表写回新的CSV文件。
下面是上述步骤的一个示例实现:
kqhtkvqz2#
在这种情况下,我会简单地使用panda * 内置 * 函数,不需要循环。
因此,假设没有重复的bin名称,请尝试以下代码复制整列:
如果只需要复制行的子集,请将boolean indexing与
pandas.DataFrame.loc
一起使用:66bbxpm53#
我不确定我是否完全理解了你的问题,但请让我知道这是否回答了你的挑战。
在Python中执行Excel类型操作的通常方式是使用框架Pandas。使用这个框架,你可以用Python代码读取、操作和保存CSV文件(以及许多其他格式)。
设置示例
编辑:确保您已经安装了panda,例如在您的终端中输入以下内容:
pip install pandas
由于我没有您的CSV文件,我将使用Pandas创建它们,而不是使用内置的read_csv()方法。
我对你的问题的理解是,你想指定哪些bin应该从你的
csv1
-文件复制到你的csv2
-文件。在你的例子中,你提到了这样的东西:现在,有几种方法可以完成你提到的复制操作。有些方法比其他方法更好。因为你明确地说 “脚本不应该一次复制所有的值”,我将给予一个遵循你的指示的建议,我相信这是一个更好的方法。
解决方案1(错误-使用for循环)
这种方法完全符合您的要求。但是,它也有几个缺点:
1.与使用Pandas库中提供的更高效的内置方法相比,遍历行是一种非常慢的方法
1.这种方法在两个CSV文件中有重复的bin时很容易受到攻击
1.这种方法在bin仅存在于其中一个CSV文件中的情况下容易受到攻击
1.由于我们一次只更新一个单元格,Pandas并不知道列的数据类型已经改变,我们仍然用
None
来表示缺少的值(以及列的“对象”类型),而不是NaN
(表示数值(浮点)列数据类型)。如果我正确地理解了您的问题,那么更好的方法如下
解决方案2(更好-使用合并)
merge()-方法的功能要强大得多,可以解决我在解决方案1中列出的所有问题。它也是join()-方法的更通用版本,根据文档,它 “类似于Excel的VLOOKUP操作"。(您提到的是Excel的等效操作)
o0lyfsai4#
嗨,你可以简单地先迭代CSV2,然后在收集想要的值后,你可以在CSV1中搜索它。我在下面写了一段代码,它可能会对你有帮助,但可以有更有效的方法来做。