日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数组去重函数_Python常用功能函数系列总结(一)

發布時間:2025/4/16 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数组去重函数_Python常用功能函数系列总结(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節目錄

常用函數一:獲取指定文件夾內所有文件

常用函數二:文件合并

常用函數三:將文件按時間劃分

常用函數四:數據去重

寫在前面

寫代碼也有很長時間了,總覺得應該做點什么有價值的事情,寫代碼初始階段覺得做更多的項目,積累更多的經驗是自己應該做的事情,這樣可以使自己短時間內技術水平獲得較大的提升。隨著代碼量和項目的增加,確實體會到了自身水平的進步,但同時由原來的盡可能多的做項目,學知識,逐漸轉變為了盡可能精盡可能專的投入,更準確的說是當有了一定的知識基礎和技術積累,追求不僅僅是知識和項目的廣度,更注重的是自身的深度,學確實自己現在或以后有可能會用到的技術和知識,做自己認為有價值的項目,我想這就是我想表達的。然而,除了不斷的學習,不斷的前進,另外一點就是需要經常做回顧和記錄,我想這就是博客和代碼倉庫的存在的價值,博客可以存儲我們學過的知識,倉庫可以存儲我們寫過的代碼。有了這些東西,我們實現了隨時隨地可以找到我們自己保存的東西。我目前的困擾就是自己積累了大量的經驗和代碼,但是還沒有形成一個系統的體系,很多重復性的工作會經常做,雖然實現過一次之后使用的時候會節省不少時間和精力,但是有時候由于=一些原因,會把時間浪費在找之前寫的代碼過程中,尤其代碼越來越多之后,沒有一個很好的存儲目錄結構,實際上是效率極低的,畢竟自己造的輪子或者搜集的輪子再次使用的時候因為找不到輪子在哪或者速度很慢不是我們追求的結果,這個Python常用函數系列博客就應運而生。

常用函數一:獲取指定文件夾內所有文件

方式一:采用os.listdur方式

def print_directory_contents(dir_path, file_list):

"""

這個函數接收文件夾的名稱作為輸入參數

返回該文件夾中文件的路徑

以及其包含文件夾中文件的路徑

"""

import os

for file in os.listdir(dir_path):

file_path = os.path.join(dir_path, file)

if os.path.isdir(file_path):

print_directory_contents(file_path, file_list)

else:

file_list.append(file_path)

if __name__ == '__main__':

file_list = []

print_directory_contents('G:/programming/interview_question', file_list)

print(file_list)

方式二:采用os.walk方式

def print_directory_contents(dir_path):

"""

這個函數接收文件夾的名稱作為輸入參數

返回該文件夾中文件的路徑

以及其包含文件夾中文件的路徑

"""

import os

for base_path, folders, files in os.walk(dir_path):

for file in files:

file_path = os.path.join(base_path, file)

yield file_path

if __name__ == '__main__':

file_list = print_directory_contents('G:/programming/interview_question')

for file in file_list:

print(file)

os.listdir和os.walk各適合什么場景?

經驗分享:兩種方式均能實現想要的功能,若讀取單層目錄,選擇os.listdir;若讀取多層目錄,選擇os.walk

常用函數二:文件合并

文件合并是數據處理中會經常用到,按合并類型劃分為橫向合并和縱向合并,此功能在pandas中有很好的實現,包含縱向合并append,橫向合并concat和join,橫縱向合并concat。下面的代碼是我基于這四個函數編寫的合并文件通用代碼,基本上這套代碼可以實現你所有的合并文件的需求。

"""

Datetime: 2020/07/05

Author: Zhang Yafei

Description: 合并文件

"""

from pandas import read_csv, read_excel, merge, concat, DataFrame

def read_file(file_path, on):

if file_path.endswith('.csv'):

return read_csv(file_path)

if file_path.endswith('.xls') or file_path.endswith('xlsx'):

return read_excel(file_path)

def df_to_file(df: DataFrame, file_path: str, index: bool = True, encoding: str = 'utf_8_sig'):

if file_path.endswith('.csv'):

df.to_csv(file_path, index=index, encoding=encoding)

if file_path.endswith('.xls') or file_path.endswith('xlsx'):

df.to_excel(file_path, index=index)

def merge_two_data(file1: str, file2: str, on: str = None, left_on: str = None, right_on: str = None,

how: str = 'inner', to_file: str = None):

"""

橫向合并兩個文件

@param file1:

@param file2:

@param on:

@param left_on:

@param right_on:

@param how:

@param to_file:

@return:

"""

df1 = read_file(file1)

df2 = read_file(file2)

merge_df = merge(df1, df2, on=on, how=how, left_on=left_on, right_on=right_on)

if to_file:

if to_file.endswith('.csv'):

merge_df.to_csv(to_file, encoding='utf_8_sig', index=False)

elif to_file.endswith('xls') or to_file.endswith('xlsx'):

merge_df.to_excel(to_file, index=False)

else:

return merge_df

def append_two_file(file1: str, file2: str, to_file: str = None):

"""

縱向合并兩個文件

@param file1:

@param file2:

@param to_file:

@return:

"""

df1 = read_file(file1)

df2 = read_file(file2)

df3 = df1.append(df2, ignore_index=True)

if to_file:

df_to_file(df3, to_file, index=False)

else:

return df3

def join_two_file(file1: str, file2: str, on: str = None, how: str = 'left', to_file: str = None):

"""

橫向合并兩個文件

@param file1:

@param file2:

@param on:

@param how:

@param to_file:

@return:

"""

df1 = read_file(file1)

df2 = read_file(file2)

df3 = df1.join(df2, on=on, how=how)

if to_file:

df_to_file(df3, to_file, index=False)

else:

return df3

def concat_more_data(axis: int = 0, to_file=None, encoding='utf_8_sig', *files):

"""

多個文件合并

@param axis: 0/index 1/column 若axis=1, 默認基于索引將多個文件合并

@param to_file: 導出文件路徑

@param encoding: 導出文件編碼

@param files: 合并文件路徑

@return:

"""

if len(files) > 1:

objs = [read_file(file) for file in files]

merge_data = concat(objs=objs, axis=axis)

if to_file:

df_to_file(merge_data, to_file, index=False, encoding=encoding)

else:

return merge_data

else:

raise Exception('合并的文件個數小于2,不能進行合并,請輸入大于等于兩個文件路徑')

經驗分享:若為兩個文件合并,橫向合并可以選擇merge,join,concat,縱向合并可以選擇append,concat,若為多個文件合并(大于2),只能選擇concat。

常用函數三:將文件按時間劃分

一個文件若有一列是時間類型,那么處理此類數據時經常會有一個需求就是按照時間點劃分此文件為多個文件,從實現上來說,讀取文件之后,把時間那一列轉換為時間類型,然后可以利用時間類型可以直接比較的,那么這樣就可以實現劃分的目的。以下是具體實現通用代碼。

# -*- coding: utf-8 -*-

"""

Datetime: 2020/06/25

Author: Zhang Yafei

Description: 將文件按時間段劃分

"""

import pandas as pd

from datetime import datetime

def data_part(file_path, col, time_list):

df = pd.read_excel(file_path)

df[col] = pd.to_datetime(df[col])

for t in range(len(time_list)):

if t != len(time_list) - 1:

data = df[(df[col] >= time_list[t]) & (df[col] <= time_list[t+1])]

else:

data = df[(df[col] >= time_list[t])]

data.to_excel(f"{file_path}_{t}.xlsx", index=False)

if __name__ == '__main__':

time_list = [datetime(2020, 1, 21), datetime(2020, 1, 24), datetime(2020, 2, 3)]

data_part('山西政策.xlsx', col='發布時間', time_list=time_list)

經驗分享:此功能函數可以直接拿來用,但是簡單的幾行代碼,對于其應用場景和使用熟練的運用可以幫助我們實現更復雜的功能。

常用函數四:數據去重

# -*- coding: utf-8 -*-

"""

Datetime: 2020/06/29

Author: Zhang Yafei

Description: 04_數據去重

"""

from pandas import read_csv, read_excel

def data_drop_duplicate(file: str, to_file: str, columns: list = None, keep: str = 'first'):

"""

:param file: 要去重的文件路徑

:param to_file: 去重之后保存的文件路徑

:param columns: 哪些列重復的去重

:param keep: 重復的情況下,保留方式,默認 'first'

"""

if file.endswith('csv'):

df = read_csv(file)

else:

df = read_excel(file)

if columns:

df.drop_duplicates(subset=columns, keep=keep, inplace=True)

else:

df.drop_duplicates(keep=keep, inplace=True)

if to_file.endswith('csv'):

df.to_csv(to_file, index=False)

elif to_file.endswith('xlsx') or to_file.endswith('xls'):

df.to_excel(to_file, index=False)

if __name__ == '__main__':

# 修改參數 file 文件名 columns 去重的列 to_file 去重之后新文件名

data_drop_duplicate(file='data.xlsx', columns=['id', 'title'], to_file='new_data.xlsx')

經驗分享:這個功能Python實現起來是非常的方便,基本上關鍵功能只需一行代碼,之前覺得這個功能很簡單,而且我用的時候這只是其中很小的一個步驟,沒必要單獨記錄下來。直到后來有同學經常單獨那這個功能來問我,我就覺得有必要記錄下來了,我相信這也是這個系列博客存在的意義,記錄過往,記錄曾經,不重復造輪子,但造出來的輪子隨時可以找到拿來用,所以這系列的博客定位就是利用輪子倉庫幫助理解實際應用的知識,從而更好的提高自己的邏輯能力,理解代碼的能力和具體寫代碼的能力,不積跬步無以至千里,不積小流無以成江海,核心道理就是積少成多,直至某一天完成質變。

總結

以上是生活随笔為你收集整理的python数组去重函数_Python常用功能函数系列总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。