[英]Replace an empty string in a list with NaN
我正在嘗試用已知字符串(例如“ 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
它正在工作,但是您只是在運行它而無需將輸出分配到任何位置。 用以下方法更改行:
fl[2] = ["nan" if x == '' else x for x in a]
或者可能:
a = ["nan" if x == '' else x for x in a]
根據您要存儲的位置...
列表理解的輸出是一個新列表-您需要做的是覆蓋現有列表(或創建一個新列表來保存結果)
a = ["nan" if x == '' else x for x in a]
我相信您雖然在獨立腳本中工作的原因是當您按原樣執行列表理解時,python會將列表打印到屏幕上,但是如果您要使用此新列表,則需要將其保存到變量。
您正在創建此["nan" if x == '' else x for x in a]
列表,但您沒有分配它! 您的代碼應類似於a= ["nan" if x == '' else x for x in a]
。
這是另一個使用isinstance()
方法的選項。 使用basestring
適用於純字符串和Unicode字符串。
[np.nan if isinstance(x, basestring) else x for x in a]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.