案例目的

第一个函数从指定文件路径读取CSV数据并转换为DataFrame,第二个函数使用灵活的条件筛选DataFrame。

示例数据

!+&idxMarketCURRPMTERMANT……
*1JPUSD10
*1CHINAEUR00
*1USAUSD10
*2JPJPY10
*3USACNY11
*4CHINACNY00
*5JPUSD11
*6JPJPY00

假定数据来源是字典

import pandas as pd
import csv
from io import StringIOdef csv_to_dataframe(csv_data=None, file_path=None, delimiter='\t'):"""将CSV数据转换为DataFrame参数:csv_data: CSV格式的字符串数据file_path: CSV文件路径delimiter: 分隔符,默认为制表符返回:pandas DataFrame对象"""if csv_data:# 从字符串读取数据df = pd.read_csv(StringIO(csv_data), delimiter=delimiter)elif file_path:# 从文件读取数据df = pd.read_csv(file_path, delimiter=delimiter)else:raise ValueError("必须提供csv_data或file_path参数")return dfdef filter_dataframe(df, **kwargs):"""根据多列条件筛选DataFrame参数:df: 要筛选的DataFrame**kwargs: 筛选条件,格式为 列名=值 或 列名=[值1, 值2, ...]返回:筛选后的DataFrame"""# 初始化筛选条件condition = pd.Series([True] * len(df))# 处理每个筛选条件for column, values in kwargs.items():if column not in df.columns:raise ValueError(f"列名 '{column}' 不存在于DataFrame中")# 如果值是列表,使用isin方法if isinstance(values, list):condition = condition & df[column].isin(values)# 如果是单个值,使用等号比较else:condition = condition & (df[column] == values)# 应用筛选条件filtered_df = df[condition]return filtered_df# 示例使用
if __name__ == "__main__":# 示例数据csv_data = """!+&	idx	Market	CURR	PM	TERMANT
*	1	JP	USD	1	0
*	1	CHINA	EUD	0	0
*	1	USA	USD	1	0
*	2	JP	JPY	1	0
*	3	USA	CNY	1	1
*	4	CHINA	CNY	0	0
*	5	JP	USD	1	1
*	6	JP	JPY	0	0"""# 使用第一个函数将CSV数据转换为DataFramedf = csv_to_dataframe(csv_data=csv_data, delimiter='\t')print("原始数据:")print(df)print("\n" + "="*50 + "\n")# 示例1: 筛选出Market为JP且CURR为JPY的所有行result1 = filter_dataframe(df, Market='JP', CURR='JPY')print("示例1 - Market为JP且CURR为JPY:")print(result1)print("\n" + "="*50 + "\n")# 示例2: 筛选出Market为日本和美国,CURR为USD和CNYresult2 = filter_dataframe(df, Market=['JP', 'USA'], CURR=['USD', 'CNY'])print("示例2 - Market为JP或USA,CURR为USD或CNY:")print(result2)print("\n" + "="*50 + "\n")# 示例3: 筛选出Market为JP,CURR为USD、CNY和EUDresult3 = filter_dataframe(df, Market='JP', CURR=['USD', 'CNY', 'EUD'])print("示例3 - Market为JP,CURR为USD、CNY或EUD:")print(result3)

这两个函数提供了灵活的筛选功能:

  1. csv_to_dataframe 函数可以从字符串或文件读取CSV数据并转换为DataFrame
  2. filter_dataframe 函数接受任意数量的列筛选条件,每个条件可以是单个值或值列表

优化:通用CSV数据处理函数

import pandas as pd
import csvdef read_csv_to_dataframe(file_path, delimiter='\t', encoding='utf-8'):"""从指定文件路径读取CSV数据并转换为DataFrame参数:file_path: CSV文件的路径delimiter: 分隔符,默认为制表符encoding: 文件编码,默认为utf-8返回:pandas DataFrame对象"""try:# 读取CSV文件df = pd.read_csv(file_path, delimiter=delimiter, encoding=encoding)print(f"成功读取文件: {file_path}")print(f"数据形状: {df.shape}")return dfexcept FileNotFoundError:print(f"错误: 文件 '{file_path}' 不存在")return Noneexcept Exception as e:print(f"读取文件时出错: {str(e)}")return Nonedef filter_dataframe(df, **kwargs):"""根据多列条件筛选DataFrame参数:df: 要筛选的DataFrame**kwargs: 筛选条件,格式为 列名=值 或 列名=[值1, 值2, ...]返回:筛选后的DataFrame"""if df is None or df.empty:print("错误: DataFrame为空或未提供有效数据")return None# 初始化筛选条件condition = pd.Series([True] * len(df))# 处理每个筛选条件for column, values in kwargs.items():if column not in df.columns:print(f"警告: 列名 '{column}' 不存在于DataFrame中,已跳过此条件")continue# 如果值是列表,使用isin方法if isinstance(values, list):condition = condition & df[column].isin(values)# 如果是单个值,使用等号比较else:condition = condition & (df[column] == values)# 应用筛选条件filtered_df = df[condition]print(f"筛选后数据形状: {filtered_df.shape}")return filtered_df# 示例使用
if __name__ == "__main__":# 示例文件路径file_path = "data.csv"# 使用第一个函数读取CSV文件df = read_csv_to_dataframe(file_path)if df is not None:print("\n原始数据前5行:")print(df.head())print("\n" + "="*50 + "\n")# 示例1: 筛选出Market为JP且CURR为JPY的所有行result1 = filter_dataframe(df, Market='JP', CURR='JPY')print("示例1 - Market为JP且CURR为JPY:")print(result1)print("\n" + "="*50 + "\n")# 示例2: 筛选出Market为日本和美国,CURR为USD和CNYresult2 = filter_dataframe(df, Market=['JP', 'USA'], CURR=['USD', 'CNY'])print("示例2 - Market为JP或USA,CURR为USD或CNY:")print(result2)print("\n" + "="*50 + "\n")# 示例3: 筛选出Market为JP,CURR为USD、CNY和EUDresult3 = filter_dataframe(df, Market='JP', CURR=['USD', 'CNY', 'EUD'])print("示例3 - Market为JP,CURR为USD、CNY或EUD:")print(result3)# 可选: 将筛选结果保存到新文件if result1 is not None and not result1.empty:result1.to_csv("filtered_result.csv", index=False, sep='\t')print("筛选结果已保存到 filtered_result.csv")

使用说明

  1. read_csv_to_dataframe 函数:

    • 输入: 文件路径、分隔符(默认为制表符)、编码格式(默认为utf-8)
    • 输出: pandas DataFrame对象
    • 功能: 从指定路径读取CSV文件并转换为DataFrame
  2. filter_dataframe 函数:

    • 输入: DataFrame对象和任意数量的筛选条件
    • 输出: 筛选后的DataFrame
    • 功能: 根据提供的列名和值进行筛选,支持单个值或值列表

使用示例

# 读取CSV文件
df = read_csv_to_dataframe("your_data.csv", delimiter='\t')# 筛选Market为JP且CURR为JPY的行
result = filter_dataframe(df, Market='JP', CURR='JPY')# 筛选Market为JP或USA,且CURR为USD或CNY的行
result = filter_dataframe(df, Market=['JP', 'USA'], CURR=['USD', 'CNY'])# 筛选Market为JP,且CURR为USD、CNY或EUD的行
result = filter_dataframe(df, Market='JP', CURR=['USD', 'CNY', 'EUD'])

注意事项

  1. 请确保文件路径正确,并且有读取权限
  2. 根据实际CSV文件的分隔符调整delimiter参数
  3. 如果文件包含非ASCII字符,可能需要调整encoding参数
  4. 如果列名包含空格或特殊字符,请确保在筛选条件中正确引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94228.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94228.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94228.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙中内存泄漏分析

引言:什么是内存泄漏? 想象一下你的手机是一个酒店,每个应用程序都是酒店的客人。当客人(应用程序)使用房间(内存)时,酒店经理(系统)会分配房间给他们使用。…

将windows 的路径挂载到Ubuntu上进行直接访问

1、下载hane NFS Server安装2、安装后打开3、在电脑上创建个共享文件夹,我这里选择D:\share4、在hane win nfs server 软件上选择Edit\preferences5、选择exports6、选择Edit exports file, 在最后添加D:\share -name:nfs,然后点击Save如果添加root权限使…

开源 python 应用 开发(十一)短语音转文本

最近有个项目需要做视觉自动化处理的工具,最后选用的软件为python,刚好这个机会进行系统学习。短时间学习,需要快速开发,所以记录要点步骤,防止忘记。 链接: 开源 python 应用 开发(一&#xf…

【C++闯关笔记】封装②:友元与模板

系列文章目录 第零篇:从C到C入门:C有而C语言没有的基础知识总结-CSDN博客 第一篇:【C闯关笔记】封装①:类与对象-CSDN博客 第二篇:【C闯关笔记】封装②:友元与模板-CSDN博客 第三篇:【C闯关笔…

Python 爬虫教程 | 豆瓣 TOP250 数据抓取与分析实战

一、项目背景与数据价值豆瓣TOP250是影视行业的重要榜单,具有以下数据价值:评分与评价人数:衡量电影市场热度;导演与演员信息:分析人才价值与影视趋势;类型 / 地区 / 年份:洞察电影类型与年代变…

第04章 SPSS简介与数据库构建

参考:SPSS实战与统计思维 - 武松编著 - 微信读书 4.1 SPSS简介 发展历史 全称Statistical Product and Service Solutions,由美国斯坦福大学三位研究生于1968年开发。 对比其他软件成立时间:SAS(1976年)、Stata&…

【ABAP4】数据字典

ABAP数据字典ABAP数据字典概述数据字典的基本对象域数据元素表类型系统创建自定义透明表创建自定义结构锁对象ABAP数据字典概述 ABAP数据字典是SAP定义和管理数据的工具,包含了程序使用的所有对象,数据字典中包括数据库表、视图、数据类型、域、搜索帮助…

不知道Pycharm怎么安装?Pycharm安装教程(附安装包)

Pycharm安装教程(附安装包)获取方式:python开发工具包丨夸克网盘-资源免费下载 有位朋友刚开始学习python,不知道Pycharm要怎么安装,于是问我要一个安装教程。 先介绍一下Pycharm吧,PyCharm是一款python开…

在 Docker 容器中查看 Python 版本

博客目录前言方法一:交互式进入容器查看方法二:启动时直接执行命令方法三:启动后使用 exec 执行命令方法四:直接运行并查看版本(容器退出)方法比较与选择指南实际应用中的注意事项进阶技巧批量检查多个镜像…

React:Umi + React + Ant Design Pro的基础上接入Mock数据

为什么需要Mock数据 前端开发依赖后端接口时的阻塞问题 独立开发和测试的需求 快速迭代和原型验证的重要性 当前版本及框架 React18 Umi 4.0 Ant Design Ant Design Pro 其实这些都不重要,主要是有Umijs,因为Umijs具有开箱即用Mock功能的能力&#…

VMware centos磁盘容量扩容教程

目录前言相关概念磁盘磁盘分区文件系统挂载点物理卷、VG(卷组)、LV(逻辑卷)、LVM(逻辑卷管理)解决方案前言 这篇博客主要分享我在VM中通过docker搭建dify大模型应用平台时,遇到了分配的磁盘容量…

kubernetes中的认证和授权

一 kubernetes API 访问控制Authentication(认证)认证方式现共有8种,可以启用一种或多种认证方式,只要有一种认证方式通过,就不再进行其它方式的认证。通常启用X509 Client Certs和Service Accout Tokens两种认证方式。…

雅菲奥朗SRE知识墙分享(四):『AI已开始重塑劳动力市场,美国年轻科技从业者首当其冲』

近日,据《商业内幕》报道,AI正在重塑美国就业市场,年轻的科技从业者正首当其冲地感受到冲击。高盛首席经济学家Jan Hatzius在本周一撰文指出:“AI 确实开始在各类数据中显现出更加明显的迹象。”据高盛的分析,科技行业…

Python爬虫入门指南:从零开始的网络数据获取之旅

文章目录前言1. 什么是网络爬虫?2. 爬虫的伦理与法律边界3. Python爬虫的基本工具库3.1 Requests:HTTP请求库3.2 Beautiful Soup:HTML/XML解析库3.3 lxml:高效XML/HTML解析器3.4 Selenium:自动化浏览器工具4. 第一个爬…

说说你对JVM的垃圾回收机制的理解?

Java 虚拟机(JVM)的垃圾回收(Garbage Collection,GC)机制是自动管理内存的核心,其核心目标是识别并回收不再被使用的对象所占用的内存,避免内存泄漏和溢出。以下从垃圾判断方法、垃圾回收算法和…

兑换汽水瓶

实现代码:public static void main(String[] args) {Scanner in new Scanner(System.in);while (in.hasNextInt()) {int n in.nextInt();if (n 0) {break;}System.out.println(n / 2);}}

结合 Flutter 和 Rust 的跨平台开发方案

结合 Flutter 和 Rust 的跨平台开发方案 1. 核心思想 本方案的核心思想是Flutter 负责 UI,Rust 负责逻辑 。Flutter 作为一个成熟的 UI 框架,专注于渲染流畅、跨平台一致的用户界面。而将那些对性能、安全和并发有高要求的复杂业务逻辑、计算密集型任务或底层系统操作,全部…

理想汽车智驾方案介绍 2|MindVLA 方案详解

一、引言 MindVLA 主要包括空间智能模块、语言智能模块、动作策略模块、强化学习模块,这些模块分别有以下功能: 空间智能模块:输入为多模态传感器数据,使用 3D 编码器提取时空特征,然后将所有传感器与语义信息融合成…

计算机网络基础(三) --- TCP/IP网络结构(运输层)

运输层1. 概述和运输服务运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能, 运输层协议是在端系统中而不是路由器中实现的, 网络应用程序可以调用多种运输层协议, 如因特网的两种协议: TCP 和 UDP ,每种协议都能为调用的应用程序提供一组不同的运输层服务1.1 运输…

JdbcTemplate和MyBatis的区别

在 Java 后端开发中,JdbcTemplate(Spring 框架提供)和 MyBatis(持久层框架)都是用于简化数据库操作的工具,但它们的设计理念、使用方式、灵活性和适用场景有显著差异。下面从核心定位、核心特性、使用方式、…