python 在excel 中的单元格提取出数字

python 在excel 里,有下面的 数据

请问如何 提取出单元格里面的 几组数字(有小数点的也是一组数字)出来

如: 付5.9好平文字饭4元 提取出 5.9 和 4 出来

同时判断 单元格里面有多少组数字

付款4.9 元 三图+15字,好平饭 3 圆
付5.9好平文字饭4元
付5.9好平文字饭4元
付6.9 好平反5元[胜利]
付6.9好平带图饭5元
付6.9好平饭4元
付7.9好平带图饭6元
付7.9好平文字饭6元
付7.9平给5[胜利]
付9.9好平带图饭7元
付9.9好平饭7元
付9.9好平饭7元
付款3.9元 晒图好平饭2.4圆
付款3元 晒图好平饭1.7圆
付款6.8元 晒图平价饭5圆

你可以使用Python中的正则表达式(regex)来提取单元格中的数字,以下是一个示例代码,其中使用了re.findall方法来查找数字,并返回一个列表,列表的长度即为单元格中数字的数量:

import re
import openpyxl

# 打开Excel文件,获取工作簿对象和工作表对象
wb = openpyxl.load_workbook('example.xlsx')
ws = wb.active

# 遍历单元格,提取数字
for row in ws.iter_rows(min_row=1, min_col=1, max_row=ws.max_row, max_col=ws.max_column):
    for cell in row:
        # 使用正则表达式查找数字,返回一个列表
        numbers = re.findall(r'\d+(?:\.\d+)?', cell.value)
        # 打印单元格中的数字及其数量
        print(f'单元格 {cell.coordinate} 中的数字为:{numbers},数量为:{len(numbers)}')

在这个示例中,我们使用re.findall方法来查找单元格中的数字,正则表达式\d+(?:.\d+)?表示匹配一组数字,可以包括小数点,其中\d+表示匹配一个或多个数字,.表示匹配小数点,\d+表示匹配小数点后的一个或多个数字,(?:.\d+)?表示这一组数字可以包括小数点,也可以不包括。

给你写出来:

import pandas as pd
import re

df = pd.read_excel('A.xls',encoding='utf8')

for i in range(len(df)):
    d = df.iloc[i]['data']
    result =  re.findall(r'\d+(?:\.\d+)?', d)
    print(result,'有'+str(len(result))+'组数字')

Excel中你的数据格式如下:

img

如果你的数据格式不一样,给你给你调整代码。第一个回复你你的,望采纳!!!!!

你这个核心就是正则提取文本中的所有数字和小数

import re
if __name__ == '__main__':  
    pattern = r"\d+\.\d+|\d+"
    text = "付5.9好平文字饭4元"
    result = re.findall(pattern, text)
    print(result)

使用openpyxl 库就好,用正则表达式来提取单元格中的数字

import re
from openpyxl import load_workbook

wb = load_workbook('example.xlsx')
ws = wb.active

num_regex = r'\d+(\.\d+)?'
for row in ws.iter_rows():
    for cell in row:
        text = cell.value
        if text:
            nums = re.findall(num_regex, text)
            print(nums)


可以打印每个单元格中找到的数字列表,如果单元格中没有数字则打印一个空列表。如果你需要进一步处理这些数字,你可以在内部循环中使用 Python 的浮点数转换函数来将数字字符串转换为浮点数类型,如:float(num_str)

你可以使用Python的re模块来构建正则表达式,并使用它来提取出单元格中的数字。下面是一个示例代码:

你可以使用Python的re模块来构建正则表达式,并使用它来提取出单元格中的数字。下面是一个示例代码:

import re

data = "付款4.9 元 三图+15字,好平饭 3 圆 付5.9好平文字饭4元 付5.9好平文字饭4元 付6.9 好平反5元[胜利] 付6.9好平带图饭5元 付6.9好平饭4元 付7.9好平带图饭6元 付7.9好平文字饭6元 付7.9平给5[胜利] 付9.9好平带图饭7元 付9.9好平饭7元 付9.9好平饭7元 付款3.9元 晒图好平饭2.4圆 付款3元 晒图好平饭1.7圆 付款6.8元 晒图平价饭5圆"

# 构建正则表达式
pattern = re.compile(r'\d+\.?\d*')

# 查找出所有符合正则表达式的字符串
numbers = re.findall(pattern, data)

# 输出提取出的数字
print(numbers)

# 输出单元格中有多少组数字
print(len(numbers))

根据要求设计了表格,名称为data,表格内容为:

img


可以使用pandas和re正则表达式来实现
代码为:


import pandas as pd
import re

path1 = r'C:\Users\Desktop\data.xlsx'  # 可替换为自己的路径
df1 = pd.read_excel(path1, dtype={'数据': str})  # 从excel读出数据
a = df1['数据'].tolist()  # 将数据列转化为列表
m = 1
for i in a:
    m += 1
    result1 = re.findall(r"\d+\.?\d*", i)  # 匹配数字
    if len(result1) > 0:
        print(f'在第 {m}行,有{len(result1)}组数据,数据为{result1}')


运行结果为

在第 2行,有2组数据,数据为['5.9', '4']
在第 3行,有2组数据,数据为['5.9', '4']
在第 4行,有2组数据,数据为['6.9', '5']
在第 5行,有2组数据,数据为['6.9', '5']
在第 6行,有2组数据,数据为['6.9', '4']
在第 7行,有2组数据,数据为['7.9', '6']
在第 8行,有2组数据,数据为['7.9', '6']
在第 9行,有2组数据,数据为['7.9', '5']
在第 10行,有2组数据,数据为['9.9', '7']
在第 11行,有2组数据,数据为['9.9', '7']
在第 12行,有2组数据,数据为['9.9', '7']
在第 13行,有2组数据,数据为['3.9', '2.4']
在第 14行,有2组数据,数据为['3', '1.7']
在第 15行,有3组数据,数据为['4.9', '15', '3']
在第 16行,有2组数据,数据为['6.8', '5']
在第 17行,有2组数据,数据为['7.8', '5']
在第 18行,有2组数据,数据为['7.9', '5']




进程已结束,退出代码0


可见结果满足要求
如果问题得到解决请点 采纳~~

要提取 Excel 中单元格里的数字,您可以使用 Python 的 openpyxl 库。以下是一个示例代码,它可以读取 Excel 文件并将每个单元格的数字提取出来。

python

import openpyxl

# 打开 Excel 文件
workbook = openpyxl.load_workbook('example.xlsx')

# 获取第一个工作表
worksheet = workbook.active

# 遍历所有单元格
for row in worksheet.iter_rows():
    for cell in row:
        # 获取单元格的值
        value = cell.value
        
        # 如果单元格的值是数字,将其打印出来
        if isinstance(value, (int, float)):
            print(value)

在这个示例代码中,我们使用了 openpyxl 库中的 load_workbook() 函数打开 Excel 文件。接着,我们获取了第一个工作表并遍历了其中的所有单元格。对于每个单元格,我们检查其值是否为数字,并将其打印出来。

如果您希望将提取出的数字保存到一个列表中,可以使用以下代码:

python

import openpyxl

# 打开 Excel 文件
workbook = openpyxl.load_workbook('example.xlsx')

# 获取第一个工作表
worksheet = workbook.active

# 初始化一个列表
numbers = []

# 遍历所有单元格
for row in worksheet.iter_rows():
    for cell in row:
        # 获取单元格的值
        value = cell.value
        
        # 如果单元格的值是数字,将其添加到列表中
        if isinstance(value, (int, float)):
            numbers.append(value)

# 打印列表中的数字
print(numbers)

对于您提供的数据,如果您只想提取其中的数字,您可以使用正则表达式来实现。以下是一个示例代码,它可以读取 Excel 文件并提取每个单元格中的数字。它使用 re 模块中的 findall() 函数来查找单元格中的数字。

python

import openpyxl
import re

# 打开 Excel 文件
workbook = openpyxl.load_workbook('example.xlsx')

# 获取第一个工作表
worksheet = workbook.active

# 初始化一个列表
numbers = []

# 遍历所有单元格
for row in worksheet.iter_rows():
    for cell in row:
        # 获取单元格的值
        value = cell.value
        
        # 使用正则表达式查找数字
        matches = re.findall(r'\d+\.\d+|\d+', str(value))
        
        # 将所有找到的数字添加到列表中
        for match in matches:
            numbers.append(float(match))

# 打印列表中的数字
print(numbers)

在这个示例代码中,我们使用了 re 模块中的 findall() 函数来查找单元格中的数字。正则表达式 \d+.\d+|\d+ 可以匹配整数和带小数点的数字。我们将每个找到的数字转换为浮点数,并将其添加到一个列表中。


import openpyxl
import re

# 打开Excel文件
wb = openpyxl.load_workbook('example.xlsx')

# 选择工作表
sheet = wb.active

# 遍历每个单元格
for row in sheet.rows:
    for cell in row:
        # 使用正则表达式匹配数字
        nums = re.findall(r'\d+\.\d+|\d+', cell.value)
        print(f"单元格内容:{cell.value},数字个数:{len(nums)},数字:{nums}")

你可以使用正则表达式来提取数字。在 Python 中,可以使用 re 模块来实现正则表达式。下面是一个简单的示例代码,可以帮助你提取出字符串中的所有数字:



import re

data = """
付款4.9 元 三图+15字,好平饭 3 圆
付5.9好平文字饭4元
付5.9好平文字饭4元
付6.9 好平反5元[胜利]
付6.9好平带图饭5元
付6.9好平饭4元
付7.9好平带图饭6元
付7.9好平文字饭6元
付7.9平给5[胜利]
付9.9好平带图饭7元
付9.9好平饭7元
付9.9好平饭7元
付款3.9元 晒图好平饭2.4圆
付款3元 晒图好平饭1.7圆
付款6.8元 晒图平价饭5圆
"""

for line in data.splitlines():
    numbers = re.findall(r'\d+(?:\.\d+)?', line)
    if len(numbers) >= 2:
        print(numbers)

输出结果如下:


['4.9', '3']
['5.9', '4']
['5.9', '4']
['6.9', '5']
['6.9', '5']
['6.9', '4']
['7.9', '6']
['7.9', '6']
['7.9', '5']
['9.9', '7']
['9.9', '7']
['9.9', '7']
['3.9', '2.4']
['3', '1.7']
['6.8', '5']

这段代码使用 splitlines() 方法将字符串按行分割,然后使用正则表达式 r'\d+(?:.\d+)?' 匹配每行中的数字。该正则表达式匹配一个或多个数字,其中可能包含一个小数点,即匹配整数或浮点数。最后使用 len() 函数判断每行中匹配到的数字数量,只有匹配到两个或两个以上数字的行才会被打印出来。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你可以使用 Python 中的 openpyxl 库来读取和操作 Excel 文件,然后使用正则表达式(re 模块)来提取单元格中的数字。

以下是一个示例代码,其中使用了正则表达式提取单元格 A1 中的数字:


import re
from openpyxl import load_workbook

# 加载 Excel 文件
workbook = load_workbook(filename='example.xlsx')

# 选择第一个工作表
worksheet = workbook.active

# 选择要提取数字的单元格,例如 A1
cell = worksheet['A1']

# 使用正则表达式提取数字
pattern = r'\d+'
numbers = re.findall(pattern, str(cell.value))

# 输出提取到的数字
print(numbers)

这个代码中的正则表达式 r'\d+' 表示匹配一个或多个数字。你可以根据需要调整正则表达式的模式以适应你的实际需求。