下面的正则表达式做的正是我想要它做的事情,除了它还将索引输出为一个数字(我认为它就是索引)。这弄乱了我的输出。那么我怎么才能告诉它不要取索引呢?
import re
import pandas as pd
df = pd.read_excel("tstfile.xlsx", names=["col1"])
for index, row in df.iterrows():
    # print(index)
    if str(row[0]).split():
        if not re.findall("(.[A-Z]\d+\-\d+)", str(row)):
            for i in re.findall("(\d+)", str(row)):
                print(i)输入数据将如下所示:
123, 456
111 * 222
LL123-456
35我得到了如下所示的输出:
123
0
456
1
111
2
222
3
35
4最终的期望输出应该是:
123
456
111
222
35因此,只有实际作为输入给出的数据。
发布于 2018-02-06 18:52:22
你可以像这样修改你的代码:
for row in df.values.astype(str):
    for word in row:
        if not re.findall("(.[A-Z]\d+\-\d+)", word):
            for num in re.findall("(\d+)", word):
                print(num)或者,下面是一个one行,它将数据帧值转换为字符串,并使用re.findall方法将数字提取为字符串。以大写字母开头且包含减号的单词将被排除。
all_numbers = re.findall(r'(\d+)', ' '.join([j for i in df.values.astype(str) for j in i if not re.search(r'[A-Z].+\-', j)]))
for item in all_numbers:
    print(item)如果需要整数而不是字符串,可以使用以下命令将列表转换为生成器
all_integers = map(int, all_numbers)
for i in all_integers:
    print(i)但请记住,生成器只能使用一次。
https://stackoverflow.com/questions/48640098
复制相似问题