簡體   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