欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Excel 通用篩選函數(shù)的實現(xiàn)

 更新時間:2025年08月22日 09:20:32   作者:偷心伊普西隆  
本文主要介紹了Python Excel 通用篩選函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

案例目的

第一個函數(shù)從指定文件路徑讀取CSV數(shù)據(jù)并轉(zhuǎn)換為DataFrame,第二個函數(shù)使用靈活的條件篩選DataFrame。

示例數(shù)據(jù)

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

假定數(shù)據(jù)來源是字典

import pandas as pd
import csv
from io import StringIO

def csv_to_dataframe(csv_data=None, file_path=None, delimiter='\t'):
    """
    將CSV數(shù)據(jù)轉(zhuǎn)換為DataFrame
    
    參數(shù):
    csv_data: CSV格式的字符串?dāng)?shù)據(jù)
    file_path: CSV文件路徑
    delimiter: 分隔符,默認(rèn)為制表符
    
    返回:
    pandas DataFrame對象
    """
    if csv_data:
        # 從字符串讀取數(shù)據(jù)
        df = pd.read_csv(StringIO(csv_data), delimiter=delimiter)
    elif file_path:
        # 從文件讀取數(shù)據(jù)
        df = pd.read_csv(file_path, delimiter=delimiter)
    else:
        raise ValueError("必須提供csv_data或file_path參數(shù)")
    
    return df

def filter_dataframe(df, **kwargs):
    """
    根據(jù)多列條件篩選DataFrame
    
    參數(shù):
    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)
    
    # 應(yīng)用篩選條件
    filtered_df = df[condition]
    
    return filtered_df

# 示例使用
if __name__ == "__main__":
    # 示例數(shù)據(jù)
    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"""
    
    # 使用第一個函數(shù)將CSV數(shù)據(jù)轉(zhuǎn)換為DataFrame
    df = csv_to_dataframe(csv_data=csv_data, delimiter='\t')
    print("原始數(shù)據(jù):")
    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)

這兩個函數(shù)提供了靈活的篩選功能:

  1. csv_to_dataframe 函數(shù)可以從字符串或文件讀取CSV數(shù)據(jù)并轉(zhuǎn)換為DataFrame
  2. filter_dataframe 函數(shù)接受任意數(shù)量的列篩選條件,每個條件可以是單個值或值列表

優(yōu)化:通用CSV數(shù)據(jù)處理函數(shù)

import pandas as pd
import csv

def read_csv_to_dataframe(file_path, delimiter='\t', encoding='utf-8'):
    """
    從指定文件路徑讀取CSV數(shù)據(jù)并轉(zhuǎn)換為DataFrame
    
    參數(shù):
    file_path: CSV文件的路徑
    delimiter: 分隔符,默認(rèn)為制表符
    encoding: 文件編碼,默認(rèn)為utf-8
    
    返回:
    pandas DataFrame對象
    """
    try:
        # 讀取CSV文件
        df = pd.read_csv(file_path, delimiter=delimiter, encoding=encoding)
        print(f"成功讀取文件: {file_path}")
        print(f"數(shù)據(jù)形狀: {df.shape}")
        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):
    """
    根據(jù)多列條件篩選DataFrame
    
    參數(shù):
    df: 要篩選的DataFrame
    **kwargs: 篩選條件,格式為 列名=值 或 列名=[值1, 值2, ...]
    
    返回:
    篩選后的DataFrame
    """
    if df is None or df.empty:
        print("錯誤: DataFrame為空或未提供有效數(shù)據(jù)")
        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)
    
    # 應(yīng)用篩選條件
    filtered_df = df[condition]
    
    print(f"篩選后數(shù)據(jù)形狀: {filtered_df.shape}")
    return filtered_df

# 示例使用
if __name__ == "__main__":
    # 示例文件路徑
    file_path = "data.csv"
    
    # 使用第一個函數(shù)讀取CSV文件
    df = read_csv_to_dataframe(file_path)
    
    if df is not None:
        print("\n原始數(shù)據(jù)前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)
        
        # 可選: 將篩選結(jié)果保存到新文件
        if result1 is not None and not result1.empty:
            result1.to_csv("filtered_result.csv", index=False, sep='\t')
            print("篩選結(jié)果已保存到 filtered_result.csv")

使用說明

  1. read_csv_to_dataframe 函數(shù):

    • 輸入: 文件路徑、分隔符(默認(rèn)為制表符)、編碼格式(默認(rèn)為utf-8)
    • 輸出: pandas DataFrame對象
    • 功能: 從指定路徑讀取CSV文件并轉(zhuǎn)換為DataFrame
  2. filter_dataframe 函數(shù):

    • 輸入: DataFrame對象和任意數(shù)量的篩選條件
    • 輸出: 篩選后的DataFrame
    • 功能: 根據(jù)提供的列名和值進(jìn)行篩選,支持單個值或值列表

使用示例

# 讀取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. 請確保文件路徑正確,并且有讀取權(quán)限
  2. 根據(jù)實際CSV文件的分隔符調(diào)整delimiter參數(shù)
  3. 如果文件包含非ASCII字符,可能需要調(diào)整encoding參數(shù)
  4. 如果列名包含空格或特殊字符,請確保在篩選條件中正確引用

到此這篇關(guān)于Python Excel 通用篩選函數(shù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python Excel篩選函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Flask 讓jsonify返回的json串支持中文顯示的方法

    Flask 讓jsonify返回的json串支持中文顯示的方法

    下面小編就為大家分享一篇Flask 讓jsonify返回的json串支持中文顯示的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • python實現(xiàn)稀疏矩陣示例代碼

    python實現(xiàn)稀疏矩陣示例代碼

    本篇文章主要介紹了python實現(xiàn)稀疏矩陣示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python實現(xiàn)中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字的方法示例

    Python實現(xiàn)中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字的方法示例

    這篇文章主要介紹了Python實現(xiàn)中文數(shù)字轉(zhuǎn)換為阿拉伯?dāng)?shù)字的方法,涉及Python字符串遍歷、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • django 控制頁面跳轉(zhuǎn)的例子

    django 控制頁面跳轉(zhuǎn)的例子

    今天小編就為大家分享一篇django 控制頁面跳轉(zhuǎn)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python使用melt和pivot實現(xiàn)DataFrame格式轉(zhuǎn)換

    Python使用melt和pivot實現(xiàn)DataFrame格式轉(zhuǎn)換

    在數(shù)據(jù)處理與分析中,經(jīng)常遇到數(shù)據(jù)需要進(jìn)行格式轉(zhuǎn)換的情況,例如將數(shù)據(jù)從寬表格式轉(zhuǎn)換為長表格式,或?qū)?shù)據(jù)重新分組匯總,Pandas提供了豐富的reshape操作,尤其是melt和pivot這兩個函數(shù),使得DataFrame可以在寬表與長表之間高效轉(zhuǎn)換,本文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • 解決Python 函數(shù)聲明先后順序出現(xiàn)的問題

    解決Python 函數(shù)聲明先后順序出現(xiàn)的問題

    這篇文章主要介紹了如何解決Python 函數(shù)聲明先后順序的問題,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • python查看zip包中文件及大小的方法

    python查看zip包中文件及大小的方法

    這篇文章主要介紹了python查看zip包中文件及大小的方法,實例分析了Python基于zipfile模塊操作zip壓縮文件的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07
  • 解決Tensorflow2.0 tf.keras.Model.load_weights() 報錯處理問題

    解決Tensorflow2.0 tf.keras.Model.load_weights() 報錯處理問題

    這篇文章主要介紹了解決Tensorflow2.0 tf.keras.Model.load_weights() 報錯處理問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨想過來看看吧
    2020-06-06
  • pytorch中常用的損失函數(shù)用法說明

    pytorch中常用的損失函數(shù)用法說明

    這篇文章主要介紹了pytorch中常用的損失函數(shù)用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python tkinter模版代碼實例

    Python tkinter模版代碼實例

    這篇文章主要介紹了Python tkinter模版代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論