--用勇氣改變可以改變的事情,用胸懷接受不可改變的事情,用智慧分辨兩者的不同,學習編程成就更好的自己--
Python語言簡潔生動,特别适合文科生學習入門IT世界,用幾十行代碼就能夠做一個完整的爬蟲腳本,開發效率杠杠的!短時間内即可解決工作和學習中碰到的各種棘手問題。(本人外語專業畢業,機緣巧合愛上編程,自學道路曲曲折折,痛并快樂!)這裡總結一下自學Python遇到的難點和重點,分享碼過的代碼和要點總結,希望能夠給初學者一點啟示和鼓勵,同時願意結交更多大神交流有助提升自己的水平。
在日常數據處理過程中經常需要按要求剔除重複數據,另外還經常需要按實際情況計算兩個日期字段的時間間隔,今天就通過一個有趣和生動的案例來給大家簡單介紹一下在pandas中數據去重和計算日期間隔功能,下面來看看以下數據集合:
可以看到該數據集合有些行數據是完全一樣的,另外還包括了兩個日期數據字段(上映日期和下映日期),接下來逐一舉例講解:
首先在Jupyter-Notebook環境下讀取和查看數據整體情況:
根據電影名字删除重複值,但同時隻保留首個出現的數據:
這裡主要使用的是drop_duplicates(subset="字段名",keep="first")方法,subset設定以哪個字段為依據進行删除重複值,而keep則為保留方法,通過觀察結果可知隻剩下唯一的電影名數據。
根據電影名字删除重複值,但同時隻保留最後一個出現的數據:
通過修改keep參數就得到了每組數據中最後一行出現的值,大家可以根據這點來提取想要的唯一數據了。
構造新字段即是電影名和語言組合字段,方便提取對應維度唯一數據:
了解和學會去重方法的基本操作,就可以随心所欲地進行去重了,這裡先通過字段間組合拼接得到新字段,然後根據這個新字段來去重吧!!!
根據電影名字&語言删除重複值,但同時隻保留首個出現的數據:
同樣再舉例說明一下去重功能,給大家加深印象和理解:
根據語言删除重複值,但同時隻保留第一個出現的數據:
根據類型删除重複值,但同時隻保留最後一個出現的數據:
講到這裡大家是不是基本上掌握了去重功能,接下來再看看日期計算的問題吧,要知道在Excel裡兩個日期字段是可以直接進行計算的,例如相減得到日期差(年月日等),那麼在pandas裡是不是也有類似的做法呢?
直接使用兩個日期字段(上映日期和下映日期)進行相減運算如下:
了解一下對應的數據類型:
通過處理果然可以得到結果!!!通過觀察數據類型方法可以看到并不是數值數據,那麼如何能夠得到純數字的相關天數呢?因為在計算日期間隔時往往需要得到日期數值差進行對應判斷分類和分析。
通過pd.Period方法計算相差天數得到數值數據:
那麼是不是可以得到對應的月份和年份數值差呢?
通過pd.Period方法計算相差月份差得到數值數據:
通過pd.Period方法計算相差年份差得到數值數據
在這裡有兩個知識點組成,一個是要靈活使用自定義函數滿足自己的需求,另外一個是熟悉和使用pd.Period語法參數,掌握了這些就基本上可以解決計算日期間隔的問題了。
整體代碼彙總如下:
import pandas as pd
import datetime
import re
import os
#set the work path
def Set_Work_Path(x):
try:
os.chdir(x)
route = os.getcwd()
return route
except Exception:
print("No Result")
work_path = r"E:\DATA\20210927"
Set_Work_Path(work_path)
#loading data
data = pd.read_excel("DATA.xlsx",header=0,sheet_name="DATA",engine="openpyxl")
display(data.dtypes)
display(data)
#根據電影名字删除重複值,但同時隻保留首個出現的數據
df1 = data.drop_duplicates(subset="電影名字",keep="first")
display(df1)
#根據電影名字删除重複值,但同時隻保留最後一個出現的數據
df2 = data.drop_duplicates(subset="電影名字",keep="last")
display(df2)
#構造新字段即是電影名和語言組合字段,方便提取對應維度唯一數據
data["電影名字&語言"] = data["電影名字"] "-" data["語言"]
display(data)
#根據電影名字&語言删除重複值,但同時隻保留首個出現的數據
df3 = data.drop_duplicates(subset="電影名字&語言",keep="first")
display(df3)
#根據語言删除重複值,但同時隻保留第一個出現的數據
df4 = data.drop_duplicates(subset="語言",keep="first")
display(df4)
#根據類型删除重複值,但同時隻保留最後一個出現的數據
df5 = data.drop_duplicates(subset="類型",keep="last")
display(df5)
#計算日期間隔-直接通過相減求天數差
data["相差天數"] = data["下映日期"] - data["上映日期"]
display(data)
display(data.dtypes)
#計算相差天數得到數值數據
#利用pd.Period方法構造自定義函數
def Get_Day_Diff(df,x,y):
try:
return (pd.Period(df[x],freq="D") - pd.Period(df[y],freq="D")).n
except Exception:
return ""
data["相差天數-數值"] = data.apply(Get_Day_Diff,axis=1,args=("下映日期","上映日期"))
display(data)
#計算相差月份并得到相差純數值
#利用pd.Period方法構造自定義函數
def Get_Month_Diff(df,x,y):
try:
return (pd.Period(df[x],freq="M") - pd.Period(df[y],freq="M")).n
except Exception:
return ""
data["相差月份-數值"] = data.apply(Get_Month_Diff,axis=1,args=("下映日期","上映日期"))
display(data)
#計算相差年份并得到相差純數值
#利用pd.Period方法構造自定義函數
def Get_Year_Diff(df,x,y):
try:
return (pd.Period(df[x],freq="Y") - pd.Period(df[y],freq="Y")).n
except Exception:
return ""
data["相差年份-數值"] = data.apply(Get_Year_Diff,axis=1,args=("下映日期","上映日期"))
display(data)
通過今天的案例,大家可以基本上掌握了如何去重并輕松搞定日期間隔計算問題了,學習數據處理最重要的就是在實際中多練多用,是不是有好多小夥伴也碰到類似的問題呢?那就趕緊動手試一下吧!!!
END
我為人人,人人為我!!歡迎大家關注,點贊和轉發!!!
~~人生不是賽場,夢想不容退場~~不斷努力學習蛻變出一個更好的自己,不斷分享學習路上的收獲和感悟幫助他人成就自己!!!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!