【问题标题】:Using Python's Higher Order Functions on a CSV在 CSV 上使用 Python 的高阶函数
【发布时间】:2016-02-21 16:59:02
【问题描述】:

我有一个包含约 45,000 行的 csv,这相当于 7 天的数据。它已按日期时间排序,最旧的记录在前。

这是将 csv 传递到 csv 模块的 DictReader 后的示例行:

{'end': '423', 'g': '2', 'endid': '17131', 'slat': '40.7', 'endname': 'Horchata', 'cid': '1', 'startname': 'Sriracha', 'startid': '521', 'slon': '-73.9', 'usertype': 'Sub', 'stoptime': '2015-02-01 00:14:00+00', 'elong': '-73.9', 'starttime': '2015-02-01 00:00:00+00', 'elat': '40.7', 'dur': '801', 'meppy': '', 'birth_year': '1978'}

...还有另一个:

{'end': '418', 'g': '1', 'endid': '17108', 'slat': '40.7', 'endname': 'Guacamole', 'cid': '1', 'startname': 'Cerveza', 'startid': '519', 'slon': '-73.9', 'usertype': 'Sub', 'stoptime': '2015-02-01 00:14:00+00', 'elong': '-73.9', 'starttime': '2015-02-02 00:00:00+00', 'elat': '40.7', 'dur': '980', 'meppy': '', 'birth_year': '1983'}

我最近写了下面的代码。它通过 csv 运行(在传递给 DictReader 之后)。该代码根据starttime 生成每个新日期的第一行,即每当日期发生变化时:

dayList = []
def first_ride(reader):
        for row in reader:
            starttime = dateutil.parser.parse(row['starttime'])
            if starttime.day not in dayList:
                day_holder.append(starttime.day)
                yield row        
            else: 
                pass

我现在的目标是从七个记录中的每一个中生成一个包含与 birth_year 关联的值的列表,即:

[1992, 1967, 1988, 1977, 1989, 1953, 1949]

问题是我想了解如何在没有生成器的情况下尽可能使用 Python 的 HOF(即map/reduce,可能还有filter)来做到这一点(目前在我的代码中使用) ,并且没有全局变量。为了消除全局变量,我猜测starttime 的每一天都必须与前一天进行比较,但不使用列表,因为我目前已经设置了它。作为最后的仅供参考,我运行 Python 2.7。

我非常感谢捐赠的任何专业知识。

【问题讨论】:

  • 您的问题到底是什么?这不是教程服务。
  • 这听起来像是 pandas 的理想工作,你为什么要为此寻找 reduce?你的 else 通行证也是多余的
  • 由于列表是按时间排序的,所以使用itertools.groupby按天或年聚合。

标签: python csv higher-order-functions


【解决方案1】:

你可以只reducedayList,进入birth_years的列表:

reduce(lambda r, d: r + [d['birth_year']], dayList, [])

或者您可以使用推导式(首选):

[d['birth_year'] for d in dayList]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2023-04-03
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多