首页 > 编程问答 >从混合字符串中查找 pandas 中的字符数

从混合字符串中查找 pandas 中的字符数

时间:2024-07-28 11:33:45浏览次数:9  
标签:python pandas

我正在寻找 pandas df 中混合列中字母的数量。如果字母数量超过 2,请保留最接近数字的两个字母。

我尝试使用下面的方法获取计数

df['count'] = len(re.findall('[a-zA-Z]', a['MyCOlumn']))

但出现以下错误:

TypeError: Expected string or bytes-像对象

输入

ABAB5395
DC5395
ABCD1234

输出

AB5395
DC5395
CD1234

以下是使用 Python 和 Pandas 解决问题的分步方法:

import pandas as pd
import re

def keep_closest_letters(text):
  """如果超过 2 个字母,则保留最接近数字的 2 个字母。"""
  letters = re.findall(r'[a-zA-Z]+', text)
  if len(letters) > 2:
    numbers = re.findall(r'\d+', text)
    if numbers:
      closest_letter_index = min(enumerate(letters), key=lambda x: abs(text.index(x[1]) - text.index(numbers[0])))[0]
      if closest_letter_index > 0:
        letters = letters[closest_letter_index-1:closest_letter_index+1]
      else:
        letters = letters[:2]
    else:
      letters = letters[:2]
  return ''.join(letters)

# 示例 DataFrame
df = pd.DataFrame({'MyColumn': ['ABAB5395', 'DC5395', 'ABCD1234']})

# 应用该函数来创建新的“输出”列
df['Output'] = df['MyColumn'].apply(keep_closest_letters)

print(df)

这将打印:

   MyColumn   Output
0  ABAB5395  AB5395
1   DC5395  DC5395
2  ABCD1234  CD1234

说明:

  1. 导入必要的库: 我们需要 pandas 来进行 DataFrame 操作, re 用于正则表达式。
  2. 定义一个函数 keep_closest_letters(text)
  3. 此函数接受文本字符串作为输入。
  4. 它使用 re.findall 查找所有字母序列 ( [a-zA-Z]+ ) 和数字 ( \d+ )。
  5. 如果字母超过 2 个,它会找到最接近第一个数字的字母,并保留该字母及其前一个或后一个字母(如果有)(最多保留 2 个字母)。
  6. 它返回连接的字母字符串。
  7. 创建示例 DataFrame: 我们创建一个示例 DataFrame df ,其中包含你的数据。
  8. 应用该函数来创建一个新的“输出”列: 我们使用 .apply 方法将 keep_closest_letters 函数应用于 MyColumn 中的每一行,并将结果存储在一个新的 Output 列中。

现在,你将拥有一个名为 Output 的新列,其中包含所需的转换后的字符串。

标签:python,pandas
From: 78802890

相关文章

  • pythonasm库分析,看看你和自学编程小学生的差距
    下面是pythonasm.asm库的源代码fromkeystoneimport*fromcapstoneimport*assembly_instructions=[]#储存汇编指令的列表#汇编指令写入列表defmov(reg1,reg2):assembly_instructions.append(f"mov{reg1},{reg2}")defdb(value):assembly_instructio......
  • 【Python系列】Python 中的垃圾收集:深入理解与实践
    ......
  • Python酷库之旅-第三方库Pandas(050)
    目录一、用法精讲181、pandas.Series.var方法181-1、语法181-2、参数181-3、功能181-4、返回值181-5、说明181-6、用法181-6-1、数据准备181-6-2、代码示例181-6-3、结果输出182、pandas.Series.kurtosis方法182-1、语法182-2、参数182-3、功能182-4、返回值1......
  • 使用 python matplotlib 和 metpy 添加辅助 y 轴
    我知道这个问题似乎与这里的许多其他问题类似,但我已经尝试过它们,不幸的是它们都没有解决我在尝试添加辅助y轴时当前面临的问题。问题是很简单,但我找不到任何可以修复它的东西:在SkewT图上添加辅助y轴会更改图的y限制,而不仅仅是添加轴。基本上,我希望添加辅......
  • Python实现基于卷积神经网络的恶意代码分类系统(设计思路概述)
    这个设计是关于一个基于卷积神经网络(CNN)的恶意代码分类系统,其主要目标是对恶意代码进行自动分类,帮助用户识别并防范不同类型的恶意软件。以下是该系统的设计思路、方法及实现过程的详细解释:设计思路恶意代码图像化:由于直接对恶意代码的源代码或二进制形式进行分类难度较......
  • Python实现基于卷积神经网络的恶意代码分类系统
    目录摘要IABSTRACTII1绪论11.1研究背景与意义11.2国内外研究现状21.3技术路线32相关知识背景52.1恶意代码检测概述52.2深度学习技术基础62.2.1卷积神经网络基本结构72.2.2激活72.2.3池化83基于卷积神经网络的恶意代码分类方法103.1卷......
  • 如何在Python脚本中解析和打印来自pymeter的API响应和错误代码?
    如何在python脚本中解析和打印来自pymeter的API响应和错误代码?PyMeter是jmeter的python版本。(pymeter帮助文档-https://pymeter.readthedocs.io/en/latest/api.html)我正在尝试获取API的性能统计数据-https://reqres.in/api/users?page=2......
  • 【YOLOv8】实战二:手把手教你使用YOLOv8实现实时目标检测、实例分割、姿态估计、目标追
    简介UltralyticsYOLOv8是一种前沿的、最先进的(SOTA)模型,它在前代YOLO版本的成功基础上进行了进一步的创新,引入了全新的特性和改进,以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计,YOLOv8在广泛的领域中,包括目标检测与跟踪、实例分割、图像分类以及姿势估计等任......
  • Python. 协程asyncio、gevent
    1、协程是一种轻量级的并发机制,允许你在单个线程内模拟并发执行多个任务。协程非常适合用于I/O密集型任务,如网络请求、文件读写等,在等待I/O操作完成时,协程可以继续执行其他任务而不是阻塞。生成器:协程的基础是生成器(generator)。生成器是一种特殊的迭代器,它可以使用 yi......
  • 14 Python列表操作内置函数(append、+、extend、insert、index、del、pop、remove、len
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......