我正在尝试用已知字符串(例如“ NAN”)替换列表中的空字符串。我正在使用以下命令
a = ['','','asdf']
["nan" if x =='' else x for x in a]
该代码在单独使用时可以正常工作,但是当我尝试在主代码中使用它时,则无法正常工作。我的主要代码如下:
data = [ ('plant_data.xlsx', 0, []),('sorg.xlsx', 1, ['','','asdf'])]#,('sloc.xlsx', 1, ['307-040N'])];
for fl in data:
filename = fl[0];
filename = filename[:-5];
f = open('IC1_Results\%s.txt' %filename,'w');
if fl[1] == 0:
f.write("All Part Numbers exist");
f.close()
elif fl[1] == 1:
a = fl[2];
print type(a)
["nan" if x == '' else x for x in a]
print fl[2],a
答案 0 :(得分:4)
它正在工作,但是您只是在运行它而无需将输出分配到任何位置。更改行:
fl[2] = ["nan" if x == '' else x for x in a]
或者也许:
a = ["nan" if x == '' else x for x in a]
取决于您要存储的位置...
答案 1 :(得分:1)
list comprehension的输出是一个新列表-您需要做的是覆盖现有列表(或创建一个新列表来保存结果)
a = ["nan" if x == '' else x for x in a]
我相信您虽然在独立脚本中工作,但原因是当您按原样执行列表理解时,python会将列表打印到屏幕上,但是如果您要使用此新列表,则我需要将其保存到变量中。
答案 2 :(得分:1)
您正在创建此["nan" if x == '' else x for x in a]
列表,但未分配!您的代码应类似于a= ["nan" if x == '' else x for x in a]
。
答案 3 :(得分:0)
这是使用isinstance()
方法的另一个选项。使用basestring
既适用于纯字符串也适用于Unicode字符串。
[np.nan if isinstance(x, basestring) else x for x in a]