我正在考虑将以下数据从Month_Day转换为tmaxmin到' Jan-01',' Feb-15'等...
Month_Day max min
0 01-01 243 86
1 01-02 230 90
2 01-03 233 104
3 01-04 220 73
4 01-05 224 71
虽然我知道做这样的替换是愚蠢的,我可以知道是否有更快的方法这样做?
for i in range(len(tmaxmin)):
if tmaxmin['Month_Day'][i][:2] == '01':
tmaxmin['Month_Day'][i] = 'Jan-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '02':
tmaxmin['Month_Day'][i] = 'Feb-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '03':
tmaxmin['Month_Day'][i] = 'Mar-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '04':
tmaxmin['Month_Day'][i] = 'Apr-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '05':
tmaxmin['Month_Day'][i] = 'May-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '06':
tmaxmin['Month_Day'][i] = 'Jun-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '07':
tmaxmin['Month_Day'][i] = 'Jul-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '08':
tmaxmin['Month_Day'][i] = 'Aug-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '09':
tmaxmin['Month_Day'][i] = 'Sep-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '10':
tmaxmin['Month_Day'][i] = 'Oct-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '11':
tmaxmin['Month_Day'][i] = 'Nov-'+tmaxmin['Month_Day'][i][3:5]
if tmaxmin['Month_Day'][i][:2] == '12':
tmaxmin['Month_Day'][i] = 'Dec-'+tmaxmin['Month_Day'][i][3:5]
答案 0 :(得分:0)
使用pandas.to_datetime
和pandas.Series.dt.strftime
(以及https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior作为参考)对您有利!
Month_Day_dt = pandas.to_datetime(tmaxmin['Month_Day'], format = '%m-%d')
tmaxmin['Month_Day'] = Month_Day_dt.dt.strftime('%b-%d')
答案 1 :(得分:0)
from datetime import datetime
for i in range(len(tmaxmin)):
dt = datetime.strptime(tmaxmin['Month_Day'][i][2:7], '%m-%d')
tmaxmin['Month_Day'][i] = dt.strftime('%b-%d')
答案 2 :(得分:0)
由于您的Month_Day
密钥似乎链接到str
,因此您不需要使用切片表示法,但最好使用str
类型方法而是startswith
。
所以:
if tmaxmin['Month_Day'][i].startswith('01'):
# do your stuff
这是清理代码的开始。
此外,tmaxmin是可迭代的,因此您只需使用for ... in ...:
来迭代它:
for date in tmaxmin:
if date['Month_Day'].startswith('01'):
date['Month_Day'] = "something else"
由于列表和dicts是可变的,因此这将编辑列表。
此外,您可能想要创建一个元组以将替换组合在一起,这样您就可以拥有更清晰的代码:
replacements = (
('01', 'Jan'),
('02', 'Feb'),
('03', 'March'),
...
)
for date in tmaxmin:
for old, new in replacements:
if date.startswith(old):
date['Month_Day'] = new + date['Month_Day'][2:]
答案 3 :(得分:0)
假设tmaxmin
是:
Month_Day max min
0 01-01 243 86
1 01-02 230 90
2 01-03 233 104
3 01-04 220 73
4 01-05 224 71
使用calendar
和apply
:
import calendar
tmaxmin.Month_Day = tmaxmin.Month_Day.apply(lambda x:calendar.month_abbr[int(x[:2])]+x[2:])
你会得到
Month_Day max min
0 Jan-01 243 86
1 Jan-02 230 90
2 Jan-03 233 104
3 Jan-04 220 73
4 Jan-05 224 71