Python自動化辦公之使用Pandas玩轉(zhuǎn)Excel數(shù)據(jù)處理全攻略
引言
在現(xiàn)代辦公環(huán)境中,Excel無疑是最常用的數(shù)據(jù)管理工具之一。然而,當(dāng)數(shù)據(jù)量龐大、操作重復(fù)性高時(shí),手動處理Excel表格不僅效率低下,還極易出錯(cuò)。這時(shí),Python的強(qiáng)大功能就顯得尤為重要,特別是其數(shù)據(jù)分析利器——Pandas庫。
Pandas提供了一套高性能、易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,能夠讓你以編程的方式高效地讀取、處理、分析乃至寫入Excel文件。對于希望提升辦公效率、擺脫繁瑣重復(fù)工作的你來說,學(xué)習(xí)如何使用Pandas操作Excel,無疑是一項(xiàng)極具價(jià)值的技能。
本篇博客將作為你的Pandas操作Excel入門指南,從最基礎(chǔ)的數(shù)據(jù)讀取開始,逐步深入到數(shù)據(jù)的查看、選擇、清洗、排序、篩選、應(yīng)用函數(shù),最終實(shí)現(xiàn)將處理后的數(shù)據(jù)寫入新的Excel文件。無論你是完全的編程新手,還是對Python自動化辦公充滿好奇,都將通過本文獲得扎實(shí)的實(shí)踐基礎(chǔ)。
讓我們一起踏上這段高效辦公的自動化之旅吧!
前置準(zhǔn)備
在開始之前,請確保你的計(jì)算機(jī)上已經(jīng)安裝了Python環(huán)境,并且安裝了本教程所需的關(guān)鍵庫。
1. 安裝Python
如果你尚未安裝Python,推薦訪問Python官方網(wǎng)站下載并安裝最新版本。安裝時(shí)請務(wù)必勾選“Add Python to PATH”選項(xiàng)。
2. 安裝Pandas和Excel讀寫庫
Pandas本身不直接支持Excel文件的讀寫,它依賴于其他庫來完成這項(xiàng)工作。對于.xlsx格式的Excel文件(新版Excel),我們需要安裝openpyxl;對于.xls格式的Excel文件(舊版Excel),則需要xlrd。通常,我們都會安裝openpyxl。
打開你的命令行工具(Windows用戶是cmd或PowerShell,macOS/Linux用戶是Terminal),運(yùn)行以下命令進(jìn)行安裝:
pip install pandas openpyxl
安裝成功后,你就可以開始使用Pandas了。
實(shí)戰(zhàn)演練:Pandas操作Excel的八大核心技能
為了更好地演示Pandas的功能,我們首先需要一個(gè)示例Excel文件。
準(zhǔn)備工作:創(chuàng)建示例Excel文件
請?jiān)谀愕墓ぷ髂夸浵聞?chuàng)建一個(gè)名為員工信息.xlsx的Excel文件,并填入以下內(nèi)容:
員工信息.xlsx
| 員工ID | 姓名 | 部門 | 職位 | 入職日期 | 工資 | 績效等級 |
|---|---|---|---|---|---|---|
| 1001 | 張三 | 銷售部 | 銷售經(jīng)理 | 2020-01-01 | 8000 | A |
| 1002 | 李四 | 市場部 | 市場專員 | 2021-03-15 | 6500 | B |
| 1003 | 王五 | 銷售部 | 銷售代表 | 2022-07-20 | 5000 | C |
| 1004 | 趙六 | 研發(fā)部 | 軟件工程師 | 2019-11-01 | 12000 | A |
| 1005 | 孫七 | 市場部 | 市場經(jīng)理 | 2018-05-10 | 9000 | A |
| 1006 | 周八 | 銷售部 | 銷售代表 | 2023-01-01 | 5200 | B |
| 1007 | 吳九 | 研發(fā)部 | 高級工程師 | 2017-09-01 | 15000 | A |
| 1008 | 鄭十 | 市場部 | 市場專員 | 2023-02-01 | 6000 | C |
| 1009 | 陳十一 | 銷售部 | NaN | 2022-04-01 | 5500 | B |
| 1010 | 錢十二 | 研發(fā)部 | 軟件工程師 | 2021-08-01 | 11000 | NaN |
其中,NaN表示缺失值。
現(xiàn)在,我們可以開始用Python和Pandas操作這個(gè)文件了。
import pandas as pd # 定義Excel文件路徑 file_path = '員工信息.xlsx'
1. 讀取Excel文件
讀取Excel文件是所有操作的第一步。Pandas提供了read_excel()函數(shù)來輕松完成這項(xiàng)任務(wù)。
# 讀取整個(gè)Excel文件的第一個(gè)工作表
df = pd.read_excel(file_path)
print("------ 原始數(shù)據(jù)框 ------")
print(df)
# 讀取指定工作表 (如果Excel文件有多個(gè)工作表,例如:sheet_name='Sheet2')
# df_sheet2 = pd.read_excel(file_path, sheet_name='Sheet2')
# print("\n------ Sheet2 數(shù)據(jù)框 ------")
# print(df_sheet2)
# 讀取時(shí)指定某一列作為索引 (例如:員工ID作為索引)
# df_indexed = pd.read_excel(file_path, index_col='員工ID')
# print("\n------ 以員工ID為索引的數(shù)據(jù)框 ------")
# print(df_indexed)
解釋:
pd.read_excel(file_path):這是最基本的用法,它會讀取Excel文件中的第一個(gè)工作表。sheet_name參數(shù):用于指定要讀取的工作表的名稱或索引(從0開始)。如果不指定,默認(rèn)為第一個(gè)工作表。index_col參數(shù):可以指定Excel文件中的某一列作為DataFrame的索引。
2. 查看數(shù)據(jù)
讀取數(shù)據(jù)后,我們需要快速了解數(shù)據(jù)的概況,包括其結(jié)構(gòu)、內(nèi)容、數(shù)據(jù)類型等。
print("\n------ 查看數(shù)據(jù)概況 ------")
# 查看前5行數(shù)據(jù) (默認(rèn)值)
print("\n前5行數(shù)據(jù):")
print(df.head())
# 查看后3行數(shù)據(jù)
print("\n后3行數(shù)據(jù):")
print(df.tail(3))
# 查看數(shù)據(jù)框的維度 (行數(shù), 列數(shù))
print("\n數(shù)據(jù)框維度 (行數(shù), 列數(shù)):", df.shape)
# 查看所有列名
print("\n所有列名:", df.columns.tolist())
# 查看數(shù)據(jù)框的簡要信息,包括列名、非空值數(shù)量、數(shù)據(jù)類型和內(nèi)存占用
print("\n數(shù)據(jù)框信息:")
df.info()
# 查看數(shù)值列的描述性統(tǒng)計(jì)信息 (計(jì)數(shù)、均值、標(biāo)準(zhǔn)差、最小值、25/50/75分位數(shù)、最大值)
print("\n數(shù)值列描述性統(tǒng)計(jì):")
print(df.describe())
# 查看所有列的描述性統(tǒng)計(jì)信息 (包括非數(shù)值列)
print("\n所有列描述性統(tǒng)計(jì):")
print(df.describe(include='all'))
解釋:
.head(n)/.tail(n):快速預(yù)覽數(shù)據(jù)的前n行或后n行,默認(rèn)n=5。.shape:返回一個(gè)元組,表示DataFrame的行數(shù)和列數(shù)。.columns:返回所有列的名稱。.info():提供數(shù)據(jù)的摘要信息,包括每列的名稱、非空值的數(shù)量、數(shù)據(jù)類型以及內(nèi)存使用情況,對于初步了解數(shù)據(jù)質(zhì)量非常有用。.describe():生成描述性統(tǒng)計(jì)信息,如計(jì)數(shù)、均值、標(biāo)準(zhǔn)差、最小值、最大值和四分位數(shù),默認(rèn)只針對數(shù)值型列。include='all'可以包含非數(shù)值型列。
3. 選擇數(shù)據(jù)
在數(shù)據(jù)處理中,我們經(jīng)常需要選擇特定的列或行進(jìn)行操作。Pandas提供了多種方式來實(shí)現(xiàn)這一點(diǎn)。
print("\n------ 選擇數(shù)據(jù) ------")
# 選擇單列:返回一個(gè)Series
print("\n選擇'姓名'列:")
print(df['姓名'])
# 選擇多列:返回一個(gè)DataFrame
print("\n選擇'姓名'和'工資'列:")
print(df[['姓名', '工資']])
# 使用.loc[]按標(biāo)簽選擇行和列 (loc[行標(biāo)簽, 列標(biāo)簽])
# 選擇第0行到第2行 (包含) 的所有列
print("\n使用.loc[]選擇前3行:")
print(df.loc[0:2])
# 選擇'張三'和'李四'的'姓名'和'部門' (需要先將姓名設(shè)為索引)
# df_indexed_name = df.set_index('姓名')
# print("\n以姓名為索引,選擇'張三'和'李四'的'姓名'和'部門':")
# print(df_indexed_name.loc[['張三', '李四'], ['部門', '職位']])
# 使用.iloc[]按位置選擇行和列 (iloc[行位置, 列位置])
# 選擇第0行到第2行 (不包含) 的所有列
print("\n使用.iloc[]選擇前3行:")
print(df.iloc[0:3])
# 選擇第0行和第2行,以及第1列和第3列
print("\n使用.iloc[]選擇特定行和列 (0,2行;1,3列):")
print(df.iloc[[0, 2], [1, 3]]) # 對應(yīng) '姓名', '職位'
解釋:
df['列名']:選擇單列,返回一個(gè)Series。df[['列名1', '列名2']]:選擇多列,返回一個(gè)DataFrame。.loc[行標(biāo)簽, 列標(biāo)簽]:主要用于基于標(biāo)簽的索引。行標(biāo)簽可以是單個(gè)標(biāo)簽、標(biāo)簽列表或標(biāo)簽切片(包含起始和結(jié)束標(biāo)簽)。列標(biāo)簽同理。.iloc[行位置, 列位置]:主要用于基于整數(shù)位置的索引。行位置可以是單個(gè)整數(shù)、整數(shù)列表或整數(shù)切片(不包含結(jié)束位置)。列位置同理。
4. 數(shù)據(jù)清洗
真實(shí)世界的數(shù)據(jù)往往是不完美的,可能包含缺失值、重復(fù)值或錯(cuò)誤的數(shù)據(jù)類型。數(shù)據(jù)清洗是數(shù)據(jù)分析的關(guān)鍵步驟。
print("\n------ 數(shù)據(jù)清洗 ------")
# 檢查缺失值
print("\n各列缺失值數(shù)量:")
print(df.isnull().sum())
# 填充缺失值 (例如:職位缺失填充為'待定', 績效等級缺失填充為'D')
df_filled = df.copy() # 創(chuàng)建副本,避免修改原始DataFrame
df_filled['職位'].fillna('待定', inplace=True)
df_filled['績效等級'].fillna('D', inplace=True)
print("\n填充缺失值后的數(shù)據(jù):")
print(df_filled)
# 刪除包含缺失值的行
df_dropna_rows = df.dropna()
print("\n刪除包含缺失值的行后的數(shù)據(jù):")
print(df_dropna_rows)
# 刪除包含缺失值的列 (如果某一列的缺失值過多)
# df_dropna_cols = df.dropna(axis=1)
# print("\n刪除包含缺失值的列后的數(shù)據(jù):")
# print(df_dropna_cols)
# 檢查重復(fù)行
print("\n重復(fù)行數(shù)量:", df.duplicated().sum())
# 刪除重復(fù)行
# 為了演示,我們先創(chuàng)建一個(gè)有重復(fù)行的DataFrame
data_with_duplicates = {
'A': [1, 2, 2, 3, 4],
'B': ['x', 'y', 'y', 'z', 'w']
}
df_dup = pd.DataFrame(data_with_duplicates)
print("\n原始帶重復(fù)值數(shù)據(jù):\n", df_dup)
df_no_dup = df_dup.drop_duplicates()
print("\n刪除重復(fù)值后的數(shù)據(jù):\n", df_no_dup)
# 數(shù)據(jù)類型轉(zhuǎn)換 (例如:將'工資'列轉(zhuǎn)換為整數(shù)類型)
# 注意:如果列中包含非數(shù)字值,轉(zhuǎn)換會報(bào)錯(cuò),需要先處理
df_cleaned = df_filled.copy() # 使用填充過缺失值的df
df_cleaned['工資'] = df_cleaned['工資'].astype(int)
print("\n'工資'列數(shù)據(jù)類型轉(zhuǎn)換為int后的數(shù)據(jù)信息:")
df_cleaned.info()
解釋:
.isnull().sum():統(tǒng)計(jì)每列的缺失值(NaN)數(shù)量。.fillna(value, inplace=True):用指定的值填充缺失值。inplace=True表示直接修改原DataFrame。.dropna(axis=0/1):刪除包含缺失值的行(axis=0,默認(rèn))或列(axis=1)。.duplicated().sum():檢查并統(tǒng)計(jì)重復(fù)的行。.drop_duplicates():刪除重復(fù)的行。.astype(dtype):將列的數(shù)據(jù)類型轉(zhuǎn)換為指定的類型(如int,float,str,datetime等)。
5. 數(shù)據(jù)排序
對數(shù)據(jù)進(jìn)行排序是常見的需求,例如按工資高低、入職時(shí)間先后等。
print("\n------ 數(shù)據(jù)排序 ------")
# 按'工資'列升序排序
df_sorted_salary_asc = df_cleaned.sort_values(by='工資', ascending=True)
print("\n按'工資'升序排序:")
print(df_sorted_salary_asc)
# 按'入職日期'降序排序
df_sorted_date_desc = df_cleaned.sort_values(by='入職日期', ascending=False)
print("\n按'入職日期'降序排序:")
print(df_sorted_date_desc)
# 多列排序:先按'部門'升序,再按'工資'降序
df_sorted_multi = df_cleaned.sort_values(by=['部門', '工資'], ascending=[True, False])
print("\n按'部門'升序,'工資'降序排序:")
print(df_sorted_multi)
解釋:
.sort_values(by='列名', ascending=True/False):根據(jù)指定列的值進(jìn)行排序。
by:指定排序的列名,可以是單個(gè)列名或列名列表。ascending:布爾值,True為升序(默認(rèn)),False為降序。如果是多列排序,可以傳入布爾值列表,對應(yīng)每列的排序方式。
6. 數(shù)據(jù)篩選
數(shù)據(jù)篩選是根據(jù)特定條件從DataFrame中選擇子集的過程,非常靈活和強(qiáng)大。
print("\n------ 數(shù)據(jù)篩選 ------")
# 篩選'部門'為'銷售部'的員工
sales_employees = df_cleaned[df_cleaned['部門'] == '銷售部']
print("\n'銷售部'的員工:")
print(sales_employees)
# 篩選'工資'大于等于8000的員工
high_salary_employees = df_cleaned[df_cleaned['工資'] >= 8000]
print("\n工資大于等于8000的員工:")
print(high_salary_employees)
# 多條件篩選:'部門'為'市場部' 且 '績效等級'為'A'的員工
market_a_employees = df_cleaned[(df_cleaned['部門'] == '市場部') & (df_cleaned['績效等級'] == 'A')]
print("\n'市場部'且'績效等級'為'A'的員工:")
print(market_a_employees)
# 多條件篩選:'部門'為'銷售部' 或 '部門'為'研發(fā)部'的員工
sales_or_rd_employees = df_cleaned[(df_cleaned['部門'] == '銷售部') | (df_cleaned['部門'] == '研發(fā)部')]
print("\n'銷售部'或'研發(fā)部'的員工:")
print(sales_or_rd_employees)
# 使用.isin()篩選:'部門'在列表['銷售部', '市場部']中的員工
selected_departments = df_cleaned[df_cleaned['部門'].isin(['銷售部', '市場部'])]
print("\n部門在['銷售部', '市場部']中的員工:")
print(selected_departments)
# 篩選包含特定字符串的行 (例如:職位包含'經(jīng)理')
# 注意:使用.str訪問字符串方法
manager_employees = df_cleaned[df_cleaned['職位'].str.contains('經(jīng)理', na=False)] # na=False 處理 NaN 值
print("\n職位包含'經(jīng)理'的員工:")
print(manager_employees)
解釋:
df[條件]:這是最基本的篩選方式,條件是一個(gè)布爾Series,DataFrame會返回對應(yīng)True的行。&(與),|(或),~(非):用于組合多個(gè)條件。**注意:**在Pandas中,條件之間必須使用&、|、~,而不是Python原生的and、or、not,并且每個(gè)條件表達(dá)式都必須用括號括起來。.isin(列表):篩選某列的值是否在給定列表中。.str.contains(字符串, na=False):篩選字符串列中包含特定子串的行。na=False表示將缺失值視為不包含該子串。
7. 應(yīng)用函數(shù)
Pandas允許你對DataFrame的列或整個(gè)DataFrame應(yīng)用函數(shù),進(jìn)行更復(fù)雜的數(shù)據(jù)轉(zhuǎn)換和計(jì)算。
print("\n------ 應(yīng)用函數(shù) ------")
# 對單列應(yīng)用函數(shù):例如,計(jì)算年終獎(jiǎng) (假設(shè)為月工資的2倍)
df_processed = df_cleaned.copy()
df_processed['年終獎(jiǎng)'] = df_processed['工資'] * 2
print("\n添加'年終獎(jiǎng)'列:")
print(df_processed[['姓名', '工資', '年終獎(jiǎng)']])
# 使用apply()對單列應(yīng)用自定義函數(shù) (例如:將績效等級轉(zhuǎn)換為數(shù)值)
def convert_performance(grade):
if grade == 'A':
return 3
elif grade == 'B':
return 2
elif grade == 'C':
return 1
else: # D或其他
return 0
df_processed['績效分?jǐn)?shù)'] = df_processed['績效等級'].apply(convert_performance)
print("\n添加'績效分?jǐn)?shù)'列:")
print(df_processed[['姓名', '績效等級', '績效分?jǐn)?shù)']])
# 使用lambda函數(shù)進(jìn)行快速計(jì)算 (例如:計(jì)算稅前總收入)
df_processed['稅前總收入'] = df_processed.apply(lambda row: row['工資'] + row['年終獎(jiǎng)'], axis=1)
print("\n添加'稅前總收入'列:")
print(df_processed[['姓名', '工資', '年終獎(jiǎng)', '稅前總收入']])
# 對多列進(jìn)行批量操作 (例如:所有數(shù)值列乘以100)
# numeric_cols = df_processed.select_dtypes(include=['int64', 'float64']).columns
# df_processed[numeric_cols] = df_processed[numeric_cols].apply(lambda x: x * 100)
# print("\n數(shù)值列乘以100后的數(shù)據(jù) (部分):")
# print(df_processed[numeric_cols].head())
解釋:
- 直接運(yùn)算:對整列進(jìn)行算術(shù)運(yùn)算,Pandas會自動進(jìn)行元素級操作。
.apply(function, axis=0/1):- 當(dāng)作用于Series時(shí)(即DataFrame的單列),
function會作用于Series的每一個(gè)元素。 - 當(dāng)作用于DataFrame時(shí):
axis=0(默認(rèn)):function會作用于每一列(Series)。axis=1:function會作用于每一行(Series)。此時(shí),function的參數(shù)是每一行的數(shù)據(jù)(一個(gè)Series),你可以通過row['列名']訪問行中的特定值。
- 當(dāng)作用于Series時(shí)(即DataFrame的單列),
lambda函數(shù):一種匿名函數(shù),常用于apply()中,進(jìn)行簡單的、一次性的操作。
8. 寫入Excel文件
完成所有數(shù)據(jù)處理后,你可能需要將結(jié)果保存到新的Excel文件中。
print("\n------ 寫入Excel文件 ------")
output_file_path = '處理后的員工信息.xlsx'
# 將處理后的DataFrame寫入新的Excel文件
# index=False 意味著不將DataFrame的索引寫入Excel的第一列
df_processed.to_excel(output_file_path, index=False)
print(f"\n數(shù)據(jù)已成功寫入 '{output_file_path}'")
# 將多個(gè)DataFrame寫入同一個(gè)Excel文件的不同工作表
output_multi_sheet_file = '多工作表員工信息.xlsx'
with pd.ExcelWriter(output_multi_sheet_file) as writer:
df_processed.to_excel(writer, sheet_name='所有員工', index=False)
sales_employees.to_excel(writer, sheet_name='銷售部員工', index=False)
high_salary_employees.to_excel(writer, sheet_name='高薪員工', index=False)
print(f"\n多個(gè)DataFrame已成功寫入 '{output_multi_sheet_file}' 的不同工作表")
解釋:
.to_excel(file_path, index=False):將DataFrame寫入Excel文件。file_path:輸出文件的路徑。index=False:非常重要,它告訴Pandas不要將DataFrame的索引作為一列寫入Excel文件。如果為True(默認(rèn)),DataFrame的索引會作為第一列被寫入,通常這不是我們想要的。
pd.ExcelWriter():用于在同一個(gè)Excel文件中寫入多個(gè)工作表。你可以創(chuàng)建一個(gè)ExcelWriter對象,然后將不同的DataFrame寫入到不同的sheet_name中。使用with語句可以確保文件在操作完成后正確關(guān)閉。
常見問題與技巧
1. 處理大文件
對于非常大的Excel文件,一次性加載到內(nèi)存可能會導(dǎo)致內(nèi)存溢出。你可以考慮:
chunksize參數(shù):在read_excel()中使用chunksize參數(shù),分塊讀取數(shù)據(jù),逐塊處理。
# for chunk in pd.read_excel(file_path, chunksize=1000):
# # 對每個(gè)chunk進(jìn)行處理
# print(f"處理了 {len(chunk)} 行數(shù)據(jù)")
usecols參數(shù):只讀取需要的列,減少內(nèi)存占用。
# df_partial = pd.read_excel(file_path, usecols=['姓名', '工資', '部門'])
2. 日期格式問題
Excel中的日期在Pandas中通常會被正確識別為datetime類型。如果發(fā)現(xiàn)日期格式不正確,可以使用pd.to_datetime()進(jìn)行轉(zhuǎn)換。
# df['入職日期'] = pd.to_datetime(df['入職日期'])
3. 編碼問題
在讀取CSV等文本文件時(shí),可能會遇到編碼問題。Excel文件通常不會有這個(gè)問題,但如果出現(xiàn)亂碼,可以嘗試在read_csv()中使用encoding參數(shù)(例如encoding='utf-8'或encoding='gbk')。read_excel()通常會自動處理。
4. 性能優(yōu)化
對于大規(guī)模數(shù)據(jù)操作,可以考慮:
- 向量化操作:盡可能使用Pandas內(nèi)置的向量化方法(如
df['col'] * 2),而不是循環(huán)apply()函數(shù),因?yàn)橄蛄炕僮魍ǔ8臁?/li> - 數(shù)據(jù)類型優(yōu)化:使用更節(jié)省內(nèi)存的數(shù)據(jù)類型,例如將整數(shù)列轉(zhuǎn)換為
int16或int32,而不是默認(rèn)的int64。
總結(jié)與展望
通過本篇博客,你已經(jīng)掌握了使用Pandas操作Excel的核心技能:從文件的讀取、數(shù)據(jù)的查看,到靈活的選擇、深入的清洗、有序的排序、精確的篩選,再到強(qiáng)大的函數(shù)應(yīng)用,最后將處理結(jié)果寫入新的Excel文件。
Pandas的強(qiáng)大之處遠(yuǎn)不止于此,它還提供了數(shù)據(jù)分組聚合(groupby)、數(shù)據(jù)合并連接(merge/join)、時(shí)間序列分析、數(shù)據(jù)可視化等高級功能。隨著你對Pandas的熟練度提高,你將能夠解決更復(fù)雜的數(shù)據(jù)處理和分析任務(wù),真正實(shí)現(xiàn)辦公自動化,大幅提升工作效率。
現(xiàn)在,是時(shí)候?qū)⑦@些知識應(yīng)用到你的實(shí)際工作中了! 嘗試用Pandas解決你日常工作中遇到的Excel難題,你會發(fā)現(xiàn)一個(gè)全新的、高效的數(shù)據(jù)處理世界。祝你在Python自動化辦公的道路上越走越遠(yuǎn)!
以上就是Python自動化辦公之使用Pandas玩轉(zhuǎn)Excel數(shù)據(jù)處理全攻略的詳細(xì)內(nèi)容,更多關(guān)于Python Pandas處理Excel數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python判斷端口是否打開的實(shí)現(xiàn)代碼
python判斷端口是否打開的代碼,有需要的朋友可以參考下2013-02-02
使用PyCharm進(jìn)行遠(yuǎn)程開發(fā)和調(diào)試的實(shí)現(xiàn)
這篇文章主要介紹了使用PyCharm進(jìn)行遠(yuǎn)程開發(fā)和調(diào)試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Python中如何實(shí)現(xiàn)MOOC掃碼登錄
這篇文章主要介紹了Python中如何實(shí)現(xiàn)MOOC掃碼登錄,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
通過Python OpenGL的point sprite技術(shù)繪制雪花
通常,點(diǎn)精靈(point sprite)技術(shù)被用于描述大量粒子在屏幕上的運(yùn)動,自然也可以用于繪制雪花。本文將通過Python OpenGL繪制雪花,感興趣的可以動手試一試2022-02-02
通過python模糊匹配算法對兩個(gè)excel表格內(nèi)容歸類
這篇文章主要介紹了通過python模糊匹配算法對兩個(gè)excel表格內(nèi)容歸類,比如兩個(gè)不同的工程項(xiàng)目針對的對象都是A,那么就需要將這兩個(gè)工程項(xiàng)目歸類到A當(dāng)中,可以減少很大一部分工作量,,需要的朋友可以參考下2023-03-03

