Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Python查找CSV文件中的数据

用Python查找CSV文件中的数据
EN

Stack Overflow用户
提问于 2022-12-02 00:36:47
回答 4查看 84关注 0票数 0

我如何在Python中实现这一点。我知道excel中有一个vlookup函数,但是如果在Python中有一种方法,我更喜欢用Python来实现它。基本上,我的目标是从CSV2列数量中获取数据,并将数据写入基于Bin_Name的CSV1的列数量。脚本不应该一次复制所有的值,它必须通过选择一个Bin_Name。例:今天,我想把Bin_Name的数据从CSV2的ABCDE到CSV1,然后它会用CSV1的列数量来写数据。如果这是可能的话,我将非常感激,并将从中学到很多东西。先谢谢你。

代码语言:javascript
运行
AI代码解释
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-12-02 00:57:56

这里有一种方法可以在Python中实现这一点而无需使用

  1. 将两个CSV文件读入两个单独的字典列表中,其中每个字典表示CSV文件中的一行。
  2. 迭代来自CSV1的字典列表,对于每个字典,在CSV2字典列表中搜索匹配的Bin_Name。
  3. 如果找到匹配,则从CSV1更新字典中的数量值,并从CSV2中的匹配字典中更新数量值。
  4. 将更新的字典列表从CSV1写回一个新的CSV文件。

以下是上述步骤的示例实现:

代码语言:javascript
运行
AI代码解释
复制
# Import the csv module to read and write CSV files
import csv

# Open the two CSV files in read mode
with open("CSV1.csv", "r") as csv1_file, open("CSV2.csv", "r") as csv2_file:
    # Use the csv reader to read the CSV files into lists of dictionaries
    csv1_reader = csv.DictReader(csv1_file)
    csv1_data = list(csv1_reader)

    csv2_reader = csv.DictReader(csv2_file)
    csv2_data = list(csv2_reader)

    # Iterate over the list of dictionaries from CSV1
    for row in csv1_data:
        # Search for a matching Bin_Name in the list of dictionaries from CSV2
        match = next((r for r in csv2_data if r["Bin_Name"] == row["Bin_Name"]), None)

        # If a match is found, update the Quantity value in the dictionary from CSV1
        # with the Quantity value from the matching dictionary in CSV2
        if match:
            row["Quantity"] = match["Quantity"]

    # Open a new CSV file in write mode
    with open("updated_csv1.csv", "w") as updated_csv1_file:
        # Use the csv writer to write the updated list of dictionaries to the new CSV file
        csv1_writer = csv.DictWriter(updated_csv1_file, fieldnames=csv1_reader.fieldnames)
        csv1_writer.writeheader()
        csv1_writer.writerows(csv1_data)
票数 0
EN

Stack Overflow用户

发布于 2022-12-02 00:53:45

嗨,您可以先迭代CSV2,然后收集想要的值之后,可以在CSV1中搜索它。我在下面写了一段代码,它可能对你有帮助,但是可以有更有效的方法来做。

代码语言:javascript
运行
AI代码解释
复制
def func(wanted_rows: list,csv2df: pd.DataFrame):
    # Iterate csv2df
    for index,row in csv2df.iterrows():
        # Check if index in the wanted list
        if index in wanted_rows:
            # Get index of CSV1 for same value
            csv1_index = CSV1[CSV1.Bin_Name == row['Bin_Name']].index[0]
            CSV1.at[csv1_index,'Quantity'] = row['Quantity']
    return df

wanted_list = [1,2,3,4,5]
func(wanted_list,CSV2df)
票数 0
EN

Stack Overflow用户

发布于 2022-12-02 01:12:21

在这种情况下,我只需要使用熊猫内置的函数,就不需要循环了。

因此,假设没有重复的bin名称,请尝试下面的代码来复制整个列:

代码语言:javascript
运行
AI代码解释
复制
df1= pd.read_csv("file1.csv")
df2= pd.read_csv("file2.csv")

df1["Quantity"]= df2["Quantity"].where(df1["Bin_Name"].eq(df2["Bin_Name"]))

print(df1)

  Bin_Name  Quantity
0        A        43
1        B        32
2        C        28
3        D        33
4        E        37
5        F        38
6        G        39
7        H        41

如果只需要复制行的子集,请将布尔索引pandas.DataFrame.loc一起使用:

代码语言:javascript
运行
AI代码解释
复制
​
vals= ["A", "B", "C", "D"]
df1.loc[df1["Bin_Name"].isin(vals), "Quantity"] = df2.loc[df1["Bin_Name"].isin(vals), "Quantity"]
print(df1)

  Bin_Name  Quantity
0        A      43.0
1        B      32.0
2        C      28.0
3        D      33.0
4        E       NaN
5        F       NaN
6        G       NaN
7        H       NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74652883

复制
相关文章
tun设备的妙用-VPN篇
疫情期间,二哥在家远程工作了。因为每天都要通过VPN访问公司内部服务,二哥想起来,何不给大家介绍下VPN的工作原理呢?VPN协议有很多个,最典型的有IPSec和OpenVPN,这里二哥只聊OpenVPN。
LanceZhang
2022/06/20
5.7K0
tun设备的妙用-VPN篇
Linux实现两台服务器之间ssh连接
只有在SSH服务开启的状态下,才能远程登录,连接和管理服务器。如果关闭SSH服务,则远程连接客户端无法再连接服务器,但是已连接的客户端可以继续使用。
华创信息技术
2019/11/14
6.2K0
Linux实现两台服务器之间ssh连接
FastLearn-计网
除了以上指标,还有一些其他指标如网络帧率、网络响应时间、噪音和抖动等也可以用来评估计算机网络的性能。这些性能指标对于评估和优化网络性能,确保网络运行正常和满足用户需求非常重要。
浪漫主义狗
2023/09/04
2190
FastLearn-计网
一文读懂两台计算机之间是如何通信的
我未曾见过一个早起勤奋谨慎诚实的人抱怨命运不好。良好的品格,优良的习惯,坚强的意志,是不会被假设所谓的命运击败的。—— 富兰克林
飞天小牛肉
2021/02/26
4.2K0
一文读懂两台计算机之间是如何通信的
网络安全技术复习
网络系统的软件、硬件以及系统中存储和传输的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改、泄露,网络系统连续可靠正常地运行,网络服务不中断。
小简
2022/12/29
1.1K0
网络安全技术复习
Manjaro Linux 连接公司的 VPN 网络
> 注意:如果你公司的 VPN 网络是在苹果下使用的,本文可能不适用(苹果系统不支持 PPTP)。
仁扬
2023/07/26
4900
腾讯云最佳实践-在腾讯云和AzureChina之间建立VPN连接
文章介绍:在两个公有云之间建议VPN连接,保证了公有云之间流量传输走内网走,增强了网络安全性,减少了攻击面
root0day
2022/11/25
8.6K0
两台centos之间传送文件
最近在CentOS系统中(主机A)读数据。由于A主机只是作为数据读取,具体的Deep Learning 实验,需要在主机B( CentOS )中进行,需要将主机A上的数据传输。由于主机A并不是一直开着CentOS系统,且数据量比较(40G+),所以用优盘copy的方法有点不现实,经过查找资料,发现了两种方法。
庞小明
2018/07/30
1.6K0
两台centos之间传送文件
NAT的双机热备方案
一般的NAT组网中,内网用户通过单台设备进行NAT转换访问外网,NAT设备承担了所有内外网之间的流量,无法规避单点故障。一旦发生单点故障,将导致内网用户无法与外网通信。
全栈程序员站长
2022/07/23
1.5K0
远程连接提示:两台计算机无法在分配的时间内连接解决方法
最近西西在使用远程桌面连接的时候发生了连接失败的问题,每次连接都会弹出“两台计算机无法在分配的时间内连接”的问题,在此之前连接远程桌面一直都没出问题,直到某天突然就弹出了这个错误无法连接。西西在网上也找了许多答案,后来终于还是解决了,下面给大家分享下解决的方法。
院长技术
2020/06/13
3.1K0
网络设备硬核技术内幕 防火墙与安全网关篇 (小结)
写这个专题开篇的时候,并没有想到,安全网关在这一个月里,为这个伟大的国家做出了卓越的贡献。在此致敬为安全网关开发、维护、推广、实施工作呕心沥血的业界朋友们!
用户8289326
2022/07/27
1.1K0
Linux两台主机之间建立信任
很多时候,我们需要在两台Linux/Unix主机之间拷贝文件(夹),但需要手动输入密码
阳光岛主
2019/02/19
2.1K0
华为ensp中路由器IPSec VPN原理及配置命令(超详解)
虚拟专用网络(VPN)通过在您的设备和远程服务器之间创建加密隧道来工作。该隧道可保护您的互联网流量免受窥探,即使您使用的是公共 Wi-Fi 网络。
神秘泣男子
2024/06/03
2.1K0
华为ensp中路由器IPSec VPN原理及配置命令(超详解)
Anyconnect的VPN环境部署(2)-在Linux客户机上连接AnyConnect VPN
之前分别介绍了在ubuntu、centos6和centos7环境下安装了Cisco AnyConnect的V**部署过程: 今天介绍下在linux客户机上连接AnyConnect V**:
洗尽了浮华
2022/03/28
5.5K0
Android开发(19) 使用adb建立pc和android设备之间的连接
在我开发过的android应用中,大多都需要和 远程服务端 进行交互,需要从服务端获得数据或者上传数据。 那样我们的app(android 应用程序,以下简写)直接访问互联网上的服务器。 当然有wifi的时候,我们就连接wifi路由,再接入服务端。图示如下:
张云飞Vir
2020/03/16
1.5K0
通过VPN连接到VPC
默认情况下,云上创建vpc中的cvm等资源无法直接和云下IDC直接进行通信。如有此类需求的场景,可通过以下几种方式进行联通【VPN、专线】。
pinkcchen
2020/10/27
7.3K0
通过VPN连接到VPC
使用 SoftEther VPN 在 VPS 和个人电脑之间搭建 VPN 网络
VPN 全称是 Virtual Private Network(虚拟专用网络),可以在多台设备之间建立安全的通信网络。VPS 是 Virtual Private Server,虚拟专用服务器,指的是一台虚拟的电脑,用于提供服务。
walterlv
2023/10/22
11.3K0
使用 SoftEther VPN 在 VPS 和个人电脑之间搭建 VPN 网络
网络协议(一):基本概念、计算机之间的连接方式
冬天vs不冷
2025/01/21
1390
网络协议(一):基本概念、计算机之间的连接方式
谈谈HTTPS安全认证,抓包与反抓包策略
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议,即超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP协议是用于从万维网服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。众所周知,HTTP是一个无状态的应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。在Internet中所有的传输都是通过TCP/IP进行的。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
创译科技
2019/08/26
3.1K0
Windows 中如何配置 VPN 连接?
是山河呀
2025/03/08
6310

相似问题

NAT能关闭VPN连接吗?

20

NAT伪装到L2TP/IPSec连接

20

无法将静态NAT后的Fortigate VPN连接到GCP VPN网关

10

Cisco VPN路由器和Sonicwall NAT之间的站点间VPN问题

10

基于NAT的点对点VPN

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文