Python Excel 通用筛选函数的实现

2025-09-21 12:50

本文主要是介绍Python Excel 通用筛选函数的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

案例目的

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

示例数据

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

假定数据来源是字典

import pandas as pd
import csv
from io import StringIO

def 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 df

def 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	UjavascriptSA	CNY	1	1
*	4	CHINA	CNY	0	0
*	5	JP	USD	1	1
*	6	JP	JPY	0	0"""
    
    # 使用第一个函数将CSV数据转换为DataFrame
    df = 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和CNY
    result2 = 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和EUD
    result3 = 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 csv

def 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}")
     China编程   return df
    except FileNotFoundError:
        print(f"错误: 文件 '{file_path}' 不存在")
        return None
    except Exception as e:
        print(f"读取文件时出错: {str(e)}")
        return None

def filter_dataframe(df, **kwargs):
    """
    根据多列条件筛选DataFrame
    
    参数:
    df: 要筛选的DataFrame
    **kwargs: 筛选条件,格式为 列名=值 或 列名=[值1, 值2, ...]
    
    返回:
    筛选后的DataFrame
    """
    if df is None or df.empty:
        print("错误: DataFrame为空或未提供有效数据")
        return None
    
    # 初始化筛选条件
    http://www.chinasem.cncondition = 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和CNY
        result2 = 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和EUD
        result3 = 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. 如果列名包含空格或特殊字符,请确保在筛选条件中正确引用

到此这篇关于python Excel 通用筛选函数的实现的文章就介绍到这了,更多相关Python Excel筛选函数内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)! 

这篇关于Python Excel 通用筛选函数的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155957

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法