【问题标题】:Convert a common date format in an ISO week date format将通用日期格式转换为 ISO 周日期格式
【发布时间】:2017-05-01 06:22:34
【问题描述】:

我有这种日期格式的数据框

           Date  Week Number   Influenza[it]  Febbre[it]  Rinorrea[it]  
0    2008-01-01             1            220         585           103   
1    2008-01-08             2            403         915           147   
2    2008-01-15             3            366         895           136   
3    2008-01-22             4            305         825           136   
4    2008-01-29             5            311         837           121 
... ...

我想像这个数据框一样将日期格式转换为 ISO 周日期格式(因为我需要根据年份和周将两个具有相同日期的数据框相交)。格式类似于“year-weeknumberoftheyear”。

0     2007-42
1     2007-43
2     2007-44
3     2007-45
4     2007-46
... ...

所以我能够以这种方式找到第一个数据帧的 ISO 周数:

wiki = pd.read_csv('file.csv', parse_dates=['Date'])
for i,d in wiki.iterrows():
    print d.Date.isocalendar()[1]

输出:

1
2
3
4
...

但我不知道如何制作像第二个数据框那样的日期格式(以“year-weeknumberoftheyear”的方式)

【问题讨论】:

    标签: python date pandas dataframe iso


    【解决方案1】:

    您可以在读取操作之后使用矢量化方法:

    df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y-%V')
    df['Date']
    0    2008-01
    1    2008-02
    2    2008-03
    3    2008-04
    4    2008-05
    Name: Date, dtype: object
    

    这里,%V 是对应于 ISO 8601 周数的指令。


    演示:

    from io import StringIO
    data = StringIO(
    '''
    Date     Week Number   Influenza[it]  Febbre[it]  Rinorrea[it]  
    2008-01-01             1            220         585           103   
    2008-01-08             2            403         915           147   
    2008-01-15             3            366         895           136   
    2008-01-22             4            305         825           136   
    2008-01-29             5            311         837           121
    ''')
    df = pd.read_csv(data, sep='\s{2,}', parse_dates=['Date'], engine='python')
    df
    

    df['Date'].dtypes
    dtype('<M8[ns]')
    
    df['Date'].dt.strftime('%Y-%V')
    0    2008-01
    1    2008-02
    2    2008-03
    3    2008-04
    4    2008-05
    Name: Date, dtype: object
    

    编辑:(虽然效率低下,仅用于重现性目的)

    L = ['{}-{}'.format(d.Date.isocalendar()[0], str(d.Date.isocalendar()[1]).zfill(2)) for i,d in wiki.iterrows()]
    

    构造series

    >>> pd.Series(L)
    0    2008-01
    1    2008-02
    2    2008-03
    3    2008-04
    4    2008-05
    dtype: object
    

    【讨论】:

    • 嗨,我试过了,但没有任何变化,输出是这样的:0 2008-01-01 00:00:00
    • 好的! wiki['Date'] 的 dtype 是什么?是datetime64[ns]的类型吗?
    • 不,你需要检查wiki['Date'].dtypes
    • 它是这样工作的!我现在才弄清楚如何插入这些日期......非常感谢!
    【解决方案2】:

    time.strftime('%Y-%W') 可能对你有用。用于格式化时间。

    将熊猫导入为 pd pd.to_datatime(time.time()).strftime('%Y-%W') '1970-00' 将出现在输出中

    【讨论】:

    • '%W':一年中的周数(星期一为一周的第一天),十进制数 [00,53]。新年中第一个星期一之前的所有日子都被认为是在第 0 周。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多