首页 > 解决方案 > 在 python 中使用正则表达式从转换后的稀疏向量列表中删除离散值的问题

问题描述

我正在尝试从 ['1:1', '2:100.0', '3:100.0',...] 之类的字符串列表中删除索引值为 1、2 和 3 的所有值。数据采用稀疏矢量格式,并作为 pandas 数据框加载。我使用在线正则表达式测试器成功匹配了该列表的前三个位置。

但由于它存在于我的程序中,相同的正则表达式不起作用。运行时:

data = pd.read_csv("c:\data.csv")

for index, row in data.itterrows():
    line = parseline(row)

def parseline(line):
    line = line.values.flatten() # data like: ['1:1 2:100.0 3:100.0...']
    stringLine = listToString(line) # data like: 1:1 2:100.0 3:100.0... 
    splitLine = stringLine.split(" ") # data like: ['1:1', '2:100.0', '3:100.0',...]

    remove = re.findall(r"'1:1'|'[2,3]:\d+.\d+'")
    splitLine.remove(remove)
    print(splitLine)

我收到以下错误:

TypeError: findall() missing 1 required positional argument: 'string'

有没有人有任何想法?提前致谢。

标签: python-3.xsparse-matrixre

解决方案


splitLine 对象实际上是一个列表,但 re.findall() 方法(以及实际使用的 re.sub() 方法)需要一个字符串,而不是一个列表。只是在错误的数据结构上操作。最终:

def parseline(line):
    line = line.values.flatten().tolist()
    stringLine = listToString(line)
    stringLine = re.sub(r"1:1 |2:\d+.\d+ ", "", stringLine)
    ...

成功了。


推荐阅读