【问题标题】:Split CSV by date按日期拆分 CSV
【发布时间】:2017-02-09 12:13:43
【问题描述】:

我希望有一个相对简单的解决方案来解决我的问题:

我有一个包含一系列数据点的 csv,但它们都包含一个日期字段。

我希望能够根据日期字段的月份将 csv 拆分为多个文件。

例如:我希望能够将 2015 年 3 月之前的所有记录放在一个文件中,将 2015 年 4 月之前的所有记录放在另一个文件中,直到 2016 年 10 月之前的所有记录,等等。

在这种情况下,文件之间会有很多重复记录。

有没有办法用一些简单的python代码来做到这一点,或者有没有更简单的方法?

提前致谢

【问题讨论】:

  • 放心,你可以用 python 做到这一点 :) 开个玩笑,到目前为止你做了什么,你能分享数据示例吗?
  • 目前我一直在尝试在分隔符中手动进行,问题是我有超过 200 万条记录,这使得共享变得非常困难。它是 15 年期间的房屋销售数据,包含“已付价格”字段、“销售日期”、“坐标”等。
  • 忠告 - 永远不要分享实际数据。另一方面,您必须分享您的数据示例,以便任何人能够帮助您或给您建议。数据格式与源数据格式相同的 5 行切片就足够了。

标签: python date csv


【解决方案1】:

此代码假定日期字段位于第一列并标记为“dates”。我们使用 pandas 将数据读入数据框并将['dates'] 作为列传递以转换为日期对象。然后,我们使用年份和月份获取数据框的不同切片来创建子集视图。然后将每个视图转储到格式为 year_month.csv 的新 csv

import pandas as pd

df = pd.read_csv('filename.csv', parse_dates=['dates'])

for year in df.dates.apply(lambda x: x.year).unique():
    for month in df.dates.apply(lambda x: x.month).unique():
        view = df[df.dates.apply(lambda x: x.month == month and x.year==year)]
        if view.size:
            view.to_csv('{}_{:0>2}.csv'.format(year, month))

可能有更好的方法来做到这一点,但这将完成工作。

【讨论】:

  • 感谢您的帮助詹姆斯。运行代码我得到属性错误:'str' object has no attribute 'year':这与我在字段中的日期格式有关吗?目前是 dd/mm/yyyy
  • 日期列的标题是什么?这就是需要传递给parse_dates 关键字输入的内容。
猜你喜欢
  • 2023-03-08
  • 2018-06-15
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多