我目前正在Excel中打开包含多列的CSV文件,其中值只会在数字更改时显示。例如,数据实际上可能是:90,90,90,90,91。但它只会显示为90 ,,,, 91。我真的很喜欢它们之间的值被填充90秒。无论如何python可以帮助吗?我真的很感谢你的帮助!
答案 0 :(得分:2)
一种技巧是使用generator函数获取一行数据,并根据需要使用yield
返回带有填充值的行。
def fill_row(row):
last_val = None
for col in row:
if(col != '' and col is not None):
last_val = col
yield last_val
inp_row = [90,'','','','',91,'',92]
filled_row = [x for x in fill_row(inp_row)]
print(filled_row)
[90,90,90,90,90,91,91,92]
纯粹基于列表的解决方案如下所示
def build_filled_row(row):
last_val = None
new_row = []
for col in row:
if(col != '' and col is not None):
last_val = col
new_row.append(last_val)
return new_row
alternate_filled_row = build_filled_row(inp_row)
print(alternate_filled_row)
答案 1 :(得分:0)
使用wordpad打开CSV时,是否可以看到缺失的值?如果是这样,那么Python或任何其他脚本语言也应该看到它们。
答案 2 :(得分:0)
您也可以在excel中完全执行此操作:
选择列(或您正在使用的任何范围),然后转到编辑>转到(Ctrl + G)并单击特殊。 检查空白&单击确定。 这将仅选择列表中的空单元格。 现在输入=键,然后按向上箭头并按住Ctrl键输入。
这将在每个空白单元格中放置一个公式,使其等于其上方的单元格。然后,您可以仅复制^粘贴值以删除公式。
答案 3 :(得分:0)
一个简短的解决方案(一个用于将['90','','','','','91']
转换为['90','90','90','90','90','91']
的衬垫):
import csv
spamReader = csv.reader(open('eggs.csv', 'rb'))
for row in spamReader:
a = map(lambda i : reduce(lambda y, z: z != "" and z or y, row[:i]), range(1,len(row)+1))
print ",".join(a)