如何使用 python 格式化 csv 中的日期?例如 2001 年 1 月至 01/2001

发布于 2025-01-12 14:23:14 字数 331 浏览 0 评论 0原文

我的 csv 文件看起来像这样

Date     Value  otm  oty
Jan 2015  300    na   na
Feb 2015  302    2    na
Mar 2015  303    1    na
Apr 2015  305    2    na
May 2015  307    2    na
Jun 2015  307    0    na
Jul 2015  305    -2   na
Aug 2015  306    1    na

How can I将所有日期更改为 mm/yyyy。例如,2015 年 1 月是 01/2015?谢谢

My csv file looks something like this

Date     Value  otm  oty
Jan 2015  300    na   na
Feb 2015  302    2    na
Mar 2015  303    1    na
Apr 2015  305    2    na
May 2015  307    2    na
Jun 2015  307    0    na
Jul 2015  305    -2   na
Aug 2015  306    1    na

How can I change all the dates to mm/yyyy. eg Jan 2015 would be 01/2015? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

昇り龍 2025-01-19 14:23:14
def reformat(x):
  # returns string
  from datetime import datetime
  return datetime.strptime(x, '%b %Y').strftime('%m/%Y')

import pandas as pd
df.Date = df.Date.apply(lambda x:reformat(x))
def reformat(x):
  # returns string
  from datetime import datetime
  return datetime.strptime(x, '%b %Y').strftime('%m/%Y')

import pandas as pd
df.Date = df.Date.apply(lambda x:reformat(x))
早茶月光 2025-01-19 14:23:14

您可以使用 Pandas 和 dateutils 轻松完成此操作,例如

from pandas import read_csv
from dateutil.parser import parse

frame = read_csv('data.csv', sep='\t')
frame['Date'] = frame['Date'].map(lambda x: parse(x).strftime('%m/%Y'))
print(frame)

这将生成如下数据框:

     Date  Value otm oty
  0  01/2015    300  na  na
  1  02/2015    302   2  na
  2  03/2015    303   1  na
  3  04/2015    305   2  na
  4  05/2015    307   2  na
  5  06/2015    307   0  na
  6  07/2015    305  -2  na
  7  08/2015    306   1  na

您还可以使用 Python 的板载工具(如 csv.DictReader 和)来完成此操作
strptime from datetime.datetime:

from csv import DictReader
from datetime import date
from pprint import pprint


def convert_date(entry):
    entry['Date'] = datetime.strptime(
        entry['Date'], '%b %Y'
    ).strftime('%m/%Y')
    return entry

with open('data.csv') as src:
    reader = DictReader(src, delimiter='\t')
    data = list(map(convert_date, reader))

pprint(data)

这将产生

[{'Date': '01/2015', 'Value': '300', 'otm': 'na', 'oty': 'na'},
 {'Date': '02/2015', 'Value': '302', 'otm': '2', 'oty': 'na'},
 {'Date': '03/2015', 'Value': '303', 'otm': '1', 'oty': 'na'},
 {'Date': '04/2015', 'Value': '305', 'otm': '2', 'oty': 'na'},
 {'Date': '05/2015', 'Value': '307', 'otm': '2', 'oty': 'na'},
 {'Date': '06/2015', 'Value': '307', 'otm': '0', 'oty': 'na'},
 {'Date': '07/2015', 'Value': '305', 'otm': '-2', 'oty': 'na'},
 {'Date': '08/2015', 'Value': '306', 'otm': '1', 'oty': 'na'}]

You could do easily with Pandas and dateutils like

from pandas import read_csv
from dateutil.parser import parse

frame = read_csv('data.csv', sep='\t')
frame['Date'] = frame['Date'].map(lambda x: parse(x).strftime('%m/%Y'))
print(frame)

This will generate a data frame like:

     Date  Value otm oty
  0  01/2015    300  na  na
  1  02/2015    302   2  na
  2  03/2015    303   1  na
  3  04/2015    305   2  na
  4  05/2015    307   2  na
  5  06/2015    307   0  na
  6  07/2015    305  -2  na
  7  08/2015    306   1  na

You could also do this with on-board tools of Python like csv.DictReader and
strptime from datetime.datetime:

from csv import DictReader
from datetime import date
from pprint import pprint


def convert_date(entry):
    entry['Date'] = datetime.strptime(
        entry['Date'], '%b %Y'
    ).strftime('%m/%Y')
    return entry

with open('data.csv') as src:
    reader = DictReader(src, delimiter='\t')
    data = list(map(convert_date, reader))

pprint(data)

This will yield

[{'Date': '01/2015', 'Value': '300', 'otm': 'na', 'oty': 'na'},
 {'Date': '02/2015', 'Value': '302', 'otm': '2', 'oty': 'na'},
 {'Date': '03/2015', 'Value': '303', 'otm': '1', 'oty': 'na'},
 {'Date': '04/2015', 'Value': '305', 'otm': '2', 'oty': 'na'},
 {'Date': '05/2015', 'Value': '307', 'otm': '2', 'oty': 'na'},
 {'Date': '06/2015', 'Value': '307', 'otm': '0', 'oty': 'na'},
 {'Date': '07/2015', 'Value': '305', 'otm': '-2', 'oty': 'na'},
 {'Date': '08/2015', 'Value': '306', 'otm': '1', 'oty': 'na'}]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文