替换熊猫列中的字符串

时间:2020-04-21 21:48:27

标签: python pandas

我在熊猫数据框中有一个名为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的结果

2 个答案:

答案 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')

输出

enter image description here

答案 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