将通用日期格式转换为 ISO 周日期格式
Convert a common date format in an ISO week date format
我有这种日期格式的数据框
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" 的方式)
您可以在读取操作后改用矢量化方法:
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
time.strftime('%Y-%W') 可能适合您。用于格式化时间。
导入 pandas 作为 pd
pd.to_datatime(time.time()).strftime('%Y-%W')
'1970-00' 将出现在输出中
我有这种日期格式的数据框
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" 的方式)
您可以在读取操作后改用矢量化方法:
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
time.strftime('%Y-%W') 可能适合您。用于格式化时间。
导入 pandas 作为 pd pd.to_datatime(time.time()).strftime('%Y-%W') '1970-00' 将出现在输出中