选择包含字符串值的列表

时间:2015-11-06 20:17:22

标签: python

我有一个包含以下非结构化数据的文件。它是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,所以我一直在深入研究如何解决这个问题。

3 个答案:

答案 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")]