我有一串元组
LL = [ ("text1",2,3,N/A), ("text2",N/A,5,6),("text3",N/A,5,N/A) ]
我需要
LL = [ ("text1",2,3,-1), ("text2",-1,5,6), ("text2",-1,5,-1) ]
所以简单地用-1替换N / A替换。我需要阅读所有行吗? 数据下载显示N / A,它不是变量。
LL是字符串
使用("text2",N/A,5,6)
。
在[0]
上运行python类型是'str'。
在[1]
上运行python类型,我没有输出。
如果我将上面的行拆分为a,b,c,d, 既然我想数字不是N / A,有没有办法说数字替换数字(-1)。分裂每一行时。或者,如果错误替换为-1。
这是另一个有相同问题的链接,注意[1]有N / A. http://download.finance.yahoo.com/d/quotes.csv?s=GS&f=sb6vt1&e=.csv
在与脾气暴躁的CSV字段进行数据下载之后挣扎。如何使用try / Except格式。
try:
IF XXX or YYY or ZZZ or AAA == 'N/A',
(dont process data...skip to except and pass)
except:
pass
答案 0 :(得分:1)
此列表理解将遍历LL
中的每个项目,并将字符串“N / A”替换为-1
。
LL = [ ("text1",2,3,"N/A"), ("text2","N/A",5,6),("text3","N/A",5,"N/A") ]
LL = [tuple(x if x != "N/A" else -1 for x in i) for i in LL]
print LL
# [('text1', 2, 3, -1), ('text2', -1, 5, 6), ('text3', -1, 5, -1)]
如果N/A
不是字符串,那么您的代码看起来不像有效的Python,编辑您的帖子,我会尝试相应地修改我的答案。
不幸的是,如果您不知道N/A
条目的位置,则无法在不循环遍历所有数据的情况下替换它们。
修改:如果LL
是一个字符串,那么正如其他人所说replace
应该做你想要的,这是一个完整的例子:
LL = '[ ("text1",2,3,N/A), ("text2",N/A,5,6),("text3",N/A,5,N/A) ]'
LL = LL.replace("N/A", "-1")
print LL
# [ ("text1",2,3,-1), ("text2",-1,5,6),("text3",-1,5,-1) ]
答案 1 :(得分:1)
根据对所有其他答案的评论,我想我看到这里发生了什么:
LL是一个字符串,用于表示元组列表,如下所示:
LL = '[ ("text1",2,3,N/A), ("text2",N/A,5,6),("text3",N/A,5,N/A) ]'
将创建用户428862从其他系统获取的那种字符串。我们可以使用以下代码替换“N / A”值并将字符串转换为可用列表:
import ast
LL_replaced = LL.replace('N/A', '-1')
LL_as_list = ast.literal_eval(LL_replaced)
现在LL_as_list
是一个元组列表,其中“N / A”在原始字符串中的位置为-1。这是你追求的吗?
答案 2 :(得分:1)
你要下载的源代码是一个csv文件,而不是一些奇怪的python东西。您可以使用CSV module更直接,更轻松地处理CSV,而不是一起攻击解决方案。
import csv, urllib
rawStockInfo = csv.reader(urllib.urlopen('http://download.finance.yahoo.com/d/quotes.csv?s=GS+AAPL+MSFT+AMZN&f=sb6vt1&e=.csv'))
stocks = [] #list for our cleaned up version
for stock in rawStockInfo:
print stock
#this replaces the string "N/A" with the int -1
stockClean = [-1 if x == 'N/A' else x for x in stock]
stocks.append(stockClean)
print stocks
请注意,您可能希望将该列表表达式更改为stock
中单元格的另一个循环...这会尝试将任何字符串转换为整数,并将-1替换为“N / A”。
stockClean = []
for cell in stock:
try:
stockClean.append(int(cell)) #turn the string '4' into the integer 4
except ValueError:
if cell == 'N/A':
stockClean.append(-1)
else:
stockClean.append(cell)
答案 3 :(得分:0)
也许我不太了解您的问题,但如果按照您的说法下载数据,则可以指定
LL = [ ("text1",2,3,N/A), ("text2",N/A,5,6),("text3",N/A,5,N/A) ]
到一个字符串:
s = 'LL = [ ("text1",2,3,N/A), ("text2",N/A,5,6),("text3",N/A,5,N/A) ]'
现在,s.replace("N/A", "-1")
应该可以解决问题。
答案 4 :(得分:0)
试试这段代码:
NEW = [tuple(x if isinstance(x, (basestring, int, long, float)) else -1 for x in i) for i in LL]
它替换所有未知类型的元素。