首页 > 编程问答 >如何使用 Python 从 Excel 工作表中读取正斜杠

如何使用 Python 从 Excel 工作表中读取正斜杠

时间:2024-08-09 14:56:53浏览次数:14  
标签:python pandas dataframe spyder xlsx

我有 20 多列的 Excel 工作表,如果我想选择不包含文本 n/a 的行,是否可以将 n/a 作为文本传递并找到它?

我尝试过的代码是,''''将 pandas 导入为 pd 进口重新 导入操作系统

def extract_data(input_file): # 读取输入的Excel文件 df = pd.read_excel(input_file)

# Check if 'agreed' is present in column 5
if not df.iloc[:, 4].astype(str).str.contains('Agreed', case=False, na=False).any():
    print("No 'agreed' found in column 5")
    return

# Filter rows where column 5 contains 'agreed'
filtered_df = df[df.iloc[:, 4].astype(str).str.contains('Agreed', case=False, na=False)]

# Initialize DataFrames for the four sheets
volumen_df = pd.DataFrame()
mrr_premium_df = pd.DataFrame()
lrr_df = pd.DataFrame()
meb_df = pd.DataFrame()

# Define a function to extract values from text
def extract_values(text, pattern):
    match = re.search(pattern, text, re.IGNORECASE)
    return match.group(1) if match else None

# Function to check if exclusion texts are in the specified column
def contains_exclusion_texts(value):
    exclusion_texts = ["n/a", "entfallen", "tbd"]
    return any(excluded_text in str(value).lower() for excluded_text in exclusion_texts)

# Process each row individually
for index, row in filtered_df.iterrows():
    col13 = contains_exclusion_texts(row.iloc[13])
    col14 = contains_exclusion_texts(row.iloc[14])
    col15 = contains_exclusion_texts(row.iloc[15])
    
    pdu_short_name = str(row.iloc[11]).replace('FAULT_', '')
    cycle_time = extract_values(str(row.iloc[20]), r'(\d+\s*ms)')
    n_value = extract_values(str(row.iloc[20]), r'n\s*=\s*(\d+)')
    q_value = extract_values(str(row.iloc[20]), r'q\s*=\s*(\d+)')
    max_delta_counter = extract_values(str(row.iloc[20]), r'MaxDeltaCounterInit\s*=\s*(\d+)')
    no_new_or_repeated_data = extract_values(str(row.iloc[20]), r'NoNewOrRepeatedData\s*=\s*(\d+)')

    data = {
        'PDU short name': pdu_short_name,
        'Cycle time': cycle_time,
        'n': n_value,
        'q': q_value,
        'Max Delta Counter': max_delta_counter,
        'No New Or Repeated Data': no_new_or_repeated_data
    }

    if not col13:
        # Volumen
        volumen_df = volumen_df.append(data, ignore_index=True)
    if not col14 :
        # Check column 12 for LRR or MRR_Premium
        type_col_value = str(row.iloc[12])
        if 'LRR' in type_col_value:
            lrr_df = lrr_df.append(data, ignore_index=True)
        if 'MRR_Premium' in type_col_value:
            mrr_premium_df = mrr_premium_df.append(data, ignore_index=True)
    if not col15 :
        # Meb
        meb_df = meb_df.append(data, ignore_index=True)

# Define output file path
output_file = os.path.join(os.path.dirname(input_file), 'extracted_data3.xlsx')

# Save the extracted data to a new Excel file with different sheets
with pd.ExcelWriter(output_file) as writer:
    volumen_df.to_excel(writer, sheet_name='Volumen', index=False)
    mrr_premium_df.to_excel(writer, sheet_name='MRR Premium', index=False)
    lrr_df.to_excel(writer, sheet_name='LRR', index=False)
    meb_df.to_excel(writer, sheet_name='Meb', index=False)

print(f"Data extracted and saved to {output_file}")

从用户处获取输入文件路径

input_file_path = input("输入输入Excel文件的路径:")

使用用户提供的文件调用该函数路径

extract_data(input_file_path) '''' 在此代码中,我试图查找所需列中是否存在 n/a 或 entfallen 或 tbd,但我仅获得 entfallen 和 tbd 的输出,而不是 n/a 的输出。意味着代码未检测到任何列中的 n/a。也许是什么原因?由于 n/a 中存在正斜杠,我是否应该找到替代方法来读取 n/a 而不是字符串。


你的代码似乎处理“n/a”字符串的方式存在问题。虽然你在 contains_exclusion_texts 函数中包含了它,但在正则表达式中用作文字字符时,正斜杠 ( / ) 在正则表达式中具有特殊含义。

你可以使用以下方法修改代码来解决这个问题:

  1. 使用 re.escape 转义正斜杠:

contains_exclusion_texts 函数修改为以下内容:

python def contains_exclusion_texts(value): exclusion_texts = [re.escape("n/a"), "entfallen", "tbd"] return any(re.search(excluded_text, str(value), re.IGNORECASE) for excluded_text in exclusion_texts) 这将确保在进行比较之前将“n/a”中的正斜杠正确转义为文字字符。

  1. 在不使用正则表达式的情况下检查存在情况:

由于你只是在检查是否存在字符串,因此你可以完全避免使用正则表达式,而使用以下方法:

python def contains_exclusion_texts(value): exclusion_texts = ["n/a", "entfallen", "tbd"] return any(excluded_text.lower() in str(value).lower() for excluded_text in exclusion_texts) 此方法将每个排除文本转换为小写,并在进行比较之前将值转换为小写,从而确保一致的比较。

通过这些更改,你的代码现在应该能够在指定列中正确检测“n/a”,并相应地过滤行。

标签:python,pandas,dataframe,spyder,xlsx
From: 78851487

相关文章

  • 零基础学习人工智能—Python—Pytorch学习(三)
    前言这篇文章主要两个内容。一,把上一篇关于requires_grad的内容补充一下。二,介绍一下线性回归。关闭张量计算关闭张量计算。这个相对简单,阅读下面代码即可。print("============关闭require_grad==============")x=torch.randn(3,requires_grad=True)print(x)x.requir......
  • python配置pip镜像
    Python配置pip的镜像国内的网络通过pip下载软件包只有不到10k的下载速度。不仅下载的慢,还容易引发超时错误,导致下载失败。而将给pip配置国内的镜像源可以完美的解决这个问题。本文讲解了pip在windows和macos/linux的配置过程(在windows实操成功)一、找到配置文件1.windows在......
  • Pytorch深度学习入门基础(三):python 加载数据初认识
    目录 一、 导入二、数据集中数据和label的组成形式三、Dataset读入数据四、Dataset类代码实战4.1创建函数4.2  设置初始化函数4.3读取每一个图片4.4设置获取数据长度函数4.5创建实例4.5.1单个图片数据集4.5.2 多个图片数据集    现在来开......
  • python多版本共存和虚拟环境
    多版本共存1.调用方式"py-3.10",即可使用对应版本的python虚拟环境1.vscode底部切到CMD,敲"py-3.8-mvenv.venv"(虚拟环境文件夹名,通常用".venv")2.点击vscode右下角,选择虚拟环境作为解释器注:以"."开头的文件在计算机系统中通常被称为隐藏文件。这些文件在许多操作系统中默认是不......
  • Python练习:数据类型篇
    一、逻辑推理练习  1、在不运行下面程序的前提下,说出答案。 1.4.0==42."4.0"==43.bool("1")4.bool("0")5.str(32)6.int(6.26)7.float(32)8.float("3.21")9.int("434")10.int("3.42")11.bool(-1)12......
  • MySQL——使用Python操作MySQL
    文章目录安装PyMySQL使用PyMySQL操作MySQL在Python中操作MySQL数据库时,我们使用较多的库是PyMySQL,如果你选择使用PyMySQL库,那么首先需要通过pip安装它。pipinstallpymysql命令就是用来安装PyMySQL的。安装PyMySQL1.打开你的命令行工具(如cmd、PowerShell、......
  • Python按条件删除Excel表格数据的方法
      本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件(在本文中我们就以.csv格式的文件为例),如下图所示。  其中,Ex......
  • Python 提取出SQL语句中Where的值的方法
    1.方法一:使用sqlparse库的方法为了提取SQL语句中WHERE子句的值,我们可以利用Python的sqlparse库,这是一个专门用于解析SQL语句的库。以下是一个示例代码,演示如何使用sqlparse来提取WHERE子句中的条件。首先,确保安装了sqlparse库。如果未安装,可以使用pip安装:bash复制代码pipins......
  • 12-python函数的传参——形参、实参、装包 *args和**kwargs
    函数的参数1形参和实参函数的参数:在定义函数时,可以再函数名后()中定义数量不等的形参,注意可以有也可以没有,可有一个也可有多个,多个形参之间用逗号隔开形参(形式参数):定义形参就相当于在函数内部声明了变量,但是并不赋值实参(实际参数):在函数定义时指定了形参,在调用的时......
  • 《信息学奥赛一本通编程启蒙》3031-3050(Scratch、C、C++、python)
    3031:练7.3买图书(C、C++、python)3031:练7.3买图书(C、C++、python)-CSDN博客3032:练7.4梯形面积(C、C++、python)3032:练7.4梯形面积(C、C++、python)-CSDN博客3033:【例8.1】人民币支付(Scratch、C、C++、python)3033:【例8.1】人民币支付(Scratch、C、C++、python)-CSDN博客3......