我有一个数据集,其中一列在该列的某些数字前面有negative sign (-)
,数据在unicode string
。我想从有号码的前面删除-
符号。这就是我试过的:
def extract(line):
#label = '{:,.2f}'.format(abs(line[4]))
label = '{:,.2f}'.format(str(float(line[4]))).lstrip("-")
return (line[0],line[1],line[2],line[3],label)
Data = sc.textFile('file1.csv').zipWithIndex().filter(lambda (line,rownum): rownum>0).map(lambda (line, rownum): line)
input_rdd = (inputData
.map(lambda line: line.split(","))
.filter(lambda line: len(line) >1 )
.map(extract))
input_data = input_rdd.collect()
当我执行此操作时,我收到错误:ValueError: Unknown format code 'f' for object of type 'str'
。我也尝试使用abs()
(在上面的代码中注释掉的行),但这也会导致错误wrong type for abs()
。如何从-
移除unicode string
符号?
这就是我的示例数据:
Level1,Male,New York,New York,3528
Level2,Male,Columbus,Ohio,-4958
如果我在上面的代码中只做了return (line[0],line[1],line[2],line[3],line[4])
并打印了rdd,那么我就明白了:
[(u'Level1', u'Male', u'New York', u'New York', u'3528'), (u'Level2', u'Male', u'Columbus', u'Ohio', u'-4958'),....]
正如您所看到的,每行或元素的最后一列中的某些值是负的unicode字符串。
答案 0 :(得分:1)
如果你特别想要的列是0,1,2,3和最后一列(格式化),那么试试这个:
def extract(line):
return (line[:4]) + ('{:,.2f}'.format(abs(float(line[-1]))),)
答案 1 :(得分:0)
为什么不使用re
模块
它有一个名为sub
的方法,可用于替换字符。
在你的情况下
re.sub("-","","-6.789")
=> 6.789