繁体   English   中英

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.splitstr.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。 strptimedate_stringformat

返回与date_string对应的datetime 时间 ,根据格式进行解析。 这相当于datetime(*(time.strptime(date_string, format)[0:6])) 如果time.strptime()无法解析date_stringformat ,或者返回的值不是时间元组,则会引发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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM