我在熊猫数据框中有一个名为last_pymnt的列,该列的日期格式为17-Mar,13-Dec等。执行字符串替换将太繁琐,因为有很多唯一的日期,所以我尝试创建用字典将我们看到的月份名称用整数替换的地方,但是似乎不起作用。这就是我所拥有的。
integers = {'-Jan': 1, '-Feb': 2, '-Mar': 3, '-Apr': 4, '-May': 5, '-Jun': 6, '-Jul': 7, '-Aug': 8,
'-Sep': 9, '-Oct': 10, '-Nov': 11, '-Dec': 12,}
data.replace({'-Jan': integers, '-Feb': integers, '-Mar': integers, '-Apr': integers, '-May':
integers, '-Jun': integers, '-Jul': integers, '-Aug': integers, '-Sep': integers, '-Oct': integers,
'-Nov': integers, '-Dec': integers})
假设输出将贯穿整个日期范围,并用整数替换部分匹配项,因此在运行代码之后,日期为3月17日的日期应为输出173,但我仍然可以得到日期为17 Mar的结果>
答案 0 :(得分:1)
IICU 否则我将避免处理日期和日期时间。
例如;
数据
df=pd.DataFrame({'last_pymnt':['17-Mar', '12-Dec']})
df
我去;
df['last_pymnt'] = pd.to_datetime(df['last_pymnt'], format='%d-%b').dt.strftime('%m-%d')
df
如果不是您想要的东西,请尝试
df=pd.DataFrame({'last_pymnt':['17-Mar', '12-Dec']})
df.last_pymnt=df.last_pymnt.str.replace('-','')
df['last_pymnt'] = pd.to_datetime(df['last_pymnt'], format='%d%b').dt.strftime('%d%m')
输出
答案 1 :(得分:0)
您可以使用正则表达式执行此操作。
\d+
周围的括号/括号是捕获的组,然后在替换字符串中用\1
引用。
import re
df = pd.DataFrame({'last_pymnt':['17-Mar','13-Dec']})
repl_dict = {re.compile(r'^(\d+)[-]Jan$'):r'\1 1',
re.compile(r'^(\d+)[-]Feb$'):r'\1 2',
re.compile(r'^(\d+)[-]Mar$'):r'\1 3',
re.compile(r'^(\d+)[-]Apr$'):r'\1 4',
re.compile(r'^(\d+)[-]May$'):r'\1 5',
re.compile(r'^(\d+)[-]Jun$'):r'\1 6',
re.compile(r'^(\d+)[-]Jul$'):r'\1 7',
re.compile(r'^(\d+)[-]Aug$'):r'\1 8',
re.compile(r'^(\d+)[-]Sep$'):r'\1 9',
re.compile(r'^(\d+)[-]Oct$'):r'\1 10',
re.compile(r'^(\d+)[-]Nov$'):r'\1 11',
re.compile(r'^(\d+)[-]Dec$'):r'\1 12',}
df['last_pymnt_repl'] = df['last_pymnt'].replace(repl_dict,regex=True).str.replace('\s+','')
结果:
In [149]: df
Out[149]:
last_pymnt last_pymnt_repl
0 17-Mar 173
1 13-Dec 1312