RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 875020
Accepted
GralL
GralL
Asked:2020-08-29 23:58:16 +0000 UTC2020-08-29 23:58:16 +0000 UTC 2020-08-29 23:58:16 +0000 UTC

如何正确解析日期?

  • 772

我有一个这样的excel文件:

import pandas as pd

data = pd.read_excel(open('C:/home/Date.xlsx','rb'), sheetname='sheet')
data.head(10)

结论:

Year FY   Quarter FY  Month FY  
FY1998    FQ4         FM10_Jan
FY1998    FQ4         FM11_Feb
FY1998    FQ4         FM12_Mar
FY1999    FQ1         FM01_Apr  
FY1999    FQ1         FM02_May             

如何将日期更改为 01/01/1998?

python
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. MaxU - stop genocide of UA
    2020-09-05T14:14:10Z2020-09-05T14:14:10Z

    源数据框:

    In [149]: df
    Out[149]:
      Year FY Quarter FY  Month FY
    0  FY1998        FQ4  FM10_Jan
    1  FY1998        FQ4  FM11_Feb
    2  FY1998        FQ4  FM12_Mar
    3  FY1999        FQ1  FM01_Apr
    4  FY1999        FQ1  FM02_May
    

    矢量化(不使用慢循环)解决方案:

    In [150]: df['date'] = (pd.to_datetime(
         ...:                   df['Month FY'].str.split('_').str[1]
         ...:                   + df['Year FY'].str.replace('FY',''),
         ...:                   format='%b%Y')
         ...:               )
         ...:
    
    In [151]: df
    Out[151]:
      Year FY Quarter FY  Month FY       date
    0  FY1998        FQ4  FM10_Jan 1998-01-01
    1  FY1998        FQ4  FM11_Feb 1998-02-01
    2  FY1998        FQ4  FM12_Mar 1998-03-01
    3  FY1999        FQ1  FM01_Apr 1999-04-01
    4  FY1999        FQ1  FM02_May 1999-05-01
    
    In [152]: df.dtypes
    Out[152]:
    Year FY               object
    Quarter FY            object
    Month FY              object
    date          datetime64[ns]    # <--- NOTE!
    dtype: object
    
    • 2
  2. GralL
    2020-09-04T17:58:29Z2020-09-04T17:58:29Z

    我找到了一个解决方案:

    def pars(date_frame): 
       date_frame['Year FY'] = date_frame['Year FY'].apply(lambda row:      row.replace("FY" , ""))
    date_frame['Month FY'] = date_frame['Month FY'].apply(lambda row: row.replace("FM" , "").replace("_","").replace('10Jan','01').replace('11Feb','02').replace('12Mar','03').replace('01Apr','04').replace('02May','05').replace('03Jun','06').replace('04Jul','07').replace('05Aug','08').replace('06Sep','09').replace('07Oct','10').replace('08Nov','11').replace('09Dec','12'))
    
    def fun (row):
        str_date = '{}.{}.{}'.format('01', row['Month FY'], row['Year FY'])
        date = pd.datetime.strptime(str_date, '%d.%m.%Y')
        row['DateTime'] = date
        return row
    
    date_frame['DateTime'] = np.NaN 
    df_with_date = date_frame.apply(fun, axis = 1)
    return df_with_date
    

    输出结果是一个附加列,其中日期以所需格式写入

    • 1
  3. Best Answer
    vadim vaduxa
    2020-09-05T00:16:41Z2020-09-05T00:16:41Z

    .replace("_","").replace('10Jan','01').replace('11Feb', ...这样做更方便

    import re
    
    def replace(text, s_r_list):
        replacements = {re.escape(s): r for (s, r) in s_r_list}
        return re.compile("|".join(replacements)).sub(lambda m: replacements[re.escape(m.group(0))], text)
    
    
    sr = ("FM" , ""), ("_",""), ('10Jan','01'), ('11Feb','02'), ('12Mar','03'),  # ...
    s = '_asdFMqwe10Jan+12Mar_'
    s = replace(s, sr)  # asdqwe01+03
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5