![](/img/trans.png)
[英]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.