您可以将str.split 与str.lstrip 一起使用:
df[['Date', 'Time']] = df.DateTime.str.split(expand=True)
df.Date = df.Date.str.lstrip('0') + '/2010'
print (df)
DateTime Date Time
0 03/17 04:00:00 3/17/2010 04:00:00
1 01/01 15:00:00 1/01/2010 15:00:00
通过正则表达式^0 与str.replace 类似的解决方案(字符串中的第一个0):
df[['Date', 'Time']] = df.DateTime.str.split(expand=True)
df.Date = df.Date.str.replace('^0', '') + '/2010'
时间安排:
In [10]: %timeit (jez(df2))
1 loop, best of 3: 483 ms per loop
In [11]: %timeit (jez(df))
1 loop, best of 3: 500 ms per loop
In [12]: %timeit (user39(df1))
1 loop, best of 3: 740 ms per loop
计时码:
df = pd.DataFrame({'DateTime': ["03/17 04:00:00", "01/01 15:00:00"]})
df = pd.concat([df]*100000).reset_index(drop=True)
#[200000 rows x 3 columns]
print (df)
df1 = df.copy()
df2 = df.copy()
def jez(df):
df[['Date', 'Time']] = df.DateTime.str.split(expand=True)
df.Date = df.Date.str.lstrip('0') + '/2010'
return (df)
def jez1(df):
df[['Date', 'Time']] = df.DateTime.str.split(expand=True)
df.Date = df.Date.str.replace('^0', '') + '/2010'
return (df)
def user39(df):
dates = []
times = []
for x in df.DateTime:
d, t = x.split()
d = re.sub("^0", "", d)
d += "/2010"
dates.append(d)
times.append(t)
df['Date'] = dates
df['Time'] = times
return df
print (jez(df))
print (jez(df2))
print (user39(df1))