我有一个包含以下非结构化数据的文件。它是Google趋势输出的结果,大约有四到五组"表"在一个电子表格中相互堆叠。
['2015-10-25', '100']
['2015-10-26', '88']
['2015-10-27', '82']
['2015-10-28', '72']
['2015-10-29', '68']
['2015-10-30', '73']
['2015-10-31', '85']
['2015-11-01', '98']
['2015-11-02', ' ']
['2015-11-03', ' ']
['2015-11-04', ' ']
[]
[]
['Top subregions for nespresso']
['Subregion', 'nespresso']
['New York', '100']
['Massachusetts', '83']
['California', '83']
['New Jersey', '80']
['Washington', '77']
['Florida', '72']
['Maryland', '64']
['District of Columbia', '63']
['Colorado', '61']
我尝试做的只是选择那些包含日期字符串的行,它始终是第一个表(在它上面的几个标题)。这就是我现在所拥有的。当然,它没有工作,因为它返回一个空的数据列表。
with open('GT_Trends_Daily.csv', 'rt') as csvfile:
csvReader = csv.reader(csvfile)
data = []
for row in csvReader:
dat = [s for row in csvReader if "2015" in s]
data.append(dat)
for i in data:
print i
我在R中有一个解决方案,但是我很乐意在这些日子里切换到Python,所以我一直在深入研究如何解决这个问题。
答案 0 :(得分:1)
您的列表理解错误,请尝试
dat = [s for s in row if "2015" in s]
答案 1 :(得分:1)
我想你想要这个:
for row in csvReader:
if any('2015' in s for s in row): data.append(row)
除非您只想附加日期:
for row in csvReader:
dat = [s for s in row if '2015' in s]
if dat: data.append(dat)
你的主要问题是你的列表理解是非常怪异的,并在每个row in csvReader
中迭代,这就是for循环的作用。
答案 2 :(得分:1)
这个列表理解可能没有做你想要的(事实上,它只是NameError
,除非你之前已经定义过s
):
dat = [s for row in csvReader if "2015" in s]
您可以使用以下列表理解填充data
:
data = [row for row in csvReader if row and row[0].startswith("2015")]