我有一個熊貓資料框,其中有一列代表日期,但以 int 格式保存。對于幾個日期,我有第 13 個月和第 14 個月。我想用第 12 個月替換這第 13 個月和第 14 個月。然后,最終將其轉換為 date_time 格式。
Original_date
20190101
20191301
20191401
New_date
20190101
20191201
20191201
我嘗試將格式替換為字串,然后僅根據字串 [4:6] 中月份的索引進行替換,但沒有成功:
df.original_date.astype(str)
for string in df['original_date']:
if string[4:6]=="13" or string[4:6]=="14":
string.replace(string, string[:4] "12" string[6:])
print(df['original_date'])
uj5u.com熱心網友回復:
您可以使用.str.replace正則運算式
df['New_date'] = df['Original_date'].astype(str).str.replace('(\d{4})(13|14)(\d{2})', r'\g<1>12\3', regex=True)
print(df)
Original_date New_date
0 20190101 20190101
1 20191301 20191201
2 20191401 20191201
uj5u.com熱心網友回復:
為什么不寫一個正則運算式?
s = pd.Series('''20190101
20191301
20191401'''.split('\n')).astype(str)
s.str.replace('(?<=\d{4})(13|14)(?=01)', '12', regex=True)
產量:
0 20190101
1 20191201
2 20191201
dtype: object
(注意,您需要將輸出重新分配回一列以將其保存在記憶體中。)
uj5u.com熱心網友回復:
您可以在單獨的函式中撰寫替換和邏輯,如果您還需要更改年份或月份,也可以選擇輕松調整它。apply允許您在 DataFrame 的每一行上使用該函式。
import pandas as pd
def split_and_replace(x):
year = x[0:4]
month = x[4:6]
day = x[6:8]
if month in ('13', '14'):
month = '12'
else:
pass
return year month day
df = pd.DataFrame(
data={
'Original_date': ['20190101', '20191301', '20191401']
}
)
res = df.Original_date.apply(lambda x: split_and_replace(x))
print(res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459855.html
上一篇:BigQuerySQL-將0更改為NULL,將NUMERIC更改為STRING型別和PARSEDATETIME(單個查詢)
