我正在使用類似于下面示例資料的 pandas 資料框。
我需要能夠通過查看時間戳欄位中的資料來創建一個新列,年份。
但是,時間戳欄位有點損壞。有時年份無效(參見 Spa 記錄),或者在欄位中輸入了兩個條目(參見 Popeyes)。
我使用了一個函式來識別哪些值可能不包含起息日作為我的起點。然后利用該函式來確定我應該將哪些值作為新列的年份子串。
# Import pandas library
import pandas as pd
# initialize list of lists
data = [['Popeyes', '2021/09/21 : 8:30 PM; 2022/10/21 : 6:30 PM'], ['Apple Store', '2021/09/21 : 10:00 AM']
, ['White Castle', '2022/10/23 : 7:00 AM'], ['Spa', '202233/10/25 : 7:00 AM']
,['Gas', '2022/10/26 : 1:00 PM']
,['Target', '202299/10/27 : 4:00 PM'],['Movie Theater', '2022/10/26 : 1:00 PM']]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['Transaction', 'Swipe timestamp'])
# print dataframe.
df
from dateutil.parser import parse
def is_date(string, fuzzy=False):
"""
Return whether the string can be interpreted as a date.
:param string: str, string to check for date
:param fuzzy: bool, ignore unknown tokens in string if True
"""
try:
parse(string, fuzzy=fuzzy)
return True
except ValueError:
return False
df["is_date_check"]=df["Swipe timestamp"].apply(is_date,fuzzy=True)
df
def extract_year(row):
if row['is_date_check'] ==True:
year = df["Swipe timestamp"].str[:4]
else:
year=''
return year
df['year'] = df.apply (lambda row: extract_year(row), axis=1)
df
uj5u.com熱心網友回復:
你需要改變df你extract_year的row
def extract_year(row):
if row['is_date_check'] ==True:
year = row["Swipe timestamp"][:4] # <--- here
else:
year=''
return year
df['year'] = df.apply(extract_year, axis=1)
或與np.where
df['year'] = np.where(df['is_date_check'], df['Swipe timestamp'].str[:4], '')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519506.html
標籤:Python熊猫数据框
