以下正则表达式正是我想要它做的,除了它还将索引输出为数字(我认为它是索引)。这弄乱了我的输出。那么我怎么能告诉它不要拿索引呢?
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
所以只有作为输入实际给出的数据。
答案 0 :(得分:1)
您可以像这样更改代码:
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)
或者,这是一个将数据帧值转换为字符串并使用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)
但请记住,发电机只能使用一次。
答案 1 :(得分:-1)
你可以试试这个:
>>> data = """123, 456
... 111 * 222
... LL123-456
... 35"""
>>> data = data.replace(',', '')
>>> data = data.split()
>>> x = [int(i) for i in data if i.isdigit()]
>>> print(x)
输出
[123, 456, 111, 222, 35]