[英]How to remove leading zeros from the calculator expression in a string? python
[英]Python remove specific zeros from string
我有一个csv,我正在加载到一个熊猫数据帧。
我想更改特定列以从月份和日期丢失前导零,并将小时分成另一列。
例如,我有一个名为DateTime的列,如“03/17 04:00:00”或“01/01 15:00:00”,我想更改列(我想连接2010到日期结束时)到“日期”栏目“3/17/2010”和“时间”栏目“4:00:00”或类似第二个例子,“日期”栏目“1 / 1/2010“和”时间“栏”15:00:00“。
我很确定我想用regex_replace来做这件事,我觉得这最简单吗?
请记住,这假设您的数据格式相同:
df = pd.DataFrame({'DateTime': ["03/17 04:00:00", "01/01 15:00:00"]})
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
你可以使用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
与regex ^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))
datetime
模块具有strptime
所需的strptime
。 您应该将正则表达式作为最后的手段保存,因为它不太可读并且更容易出错。
classmethod datetime。 strptime ( date_string , format )
返回与date_string对应的
datetime
时间 ,根据格式进行解析。 这相当于datetime(*(time.strptime(date_string, format)[0:6]))
。 如果time.strptime()
无法解析date_string和format ,或者返回的值不是时间元组,则会引发ValueError
。 有关格式化指令的完整列表,请参阅strftime()和strptime()行为 。
该文档包含指令,但这是您可以在代码中实现的示例:
import datetime
def convert_time(tm):
dt = datetime.datetime.strptime(tm, "%m/%d %H:%M:%S")
dt.year = 2010
parsed_date = "{month}/{day}/{year}".format(*dt)
parsed_time = "{hour}:{minute}:{second}".format(*dt)
return parsed_date, parsed_time
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.