佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > 一些讓Python代碼簡潔的實(shí)用技巧總結(jié)

一些讓Python代碼簡潔的實(shí)用技巧總結(jié)

熱門標(biāo)簽:銀行業(yè)務(wù) 呼叫中心市場需求 檢查注冊(cè)表項(xiàng) 智能手機(jī) 鐵路電話系統(tǒng) 美圖手機(jī) 網(wǎng)站文章發(fā)布 服務(wù)器配置

前言

眾所周知,編寫Python代碼在開始時(shí)十分容易,但隨著你在工具包中添加更多的庫,你的腳本可能會(huì)有不必要的代碼行,變得冗長而混亂。可能短期內(nèi)能夠應(yīng)付工作,但長期來看,麻煩不小。

在這篇文章中,我將與你分享7個(gè)技巧,使你在使用Python進(jìn)行數(shù)據(jù)科學(xué)時(shí)更加簡潔。這涵蓋了我們?nèi)粘K龅氖虑?,例如修改Pandas數(shù)據(jù)框中的值,連接字符串,讀取文件等操作!

1. 使用Lambda來修改Pandas數(shù)據(jù)框中的值

假設(shè)我們有以下df數(shù)據(jù)框:

data = [[1,2,3], [4,5,6], [7,8,9]]
df = pd.DataFrame(data, columns=[0,1,2])
IN[1]: print (df)
OUT[1]:    0  1  2
        0  1  2  3
        1  4  5  6
        2  7  8  9

現(xiàn)在由于某種原因,你需要在第0列的數(shù)字上添加01的值。一個(gè)常見的方法是定義一個(gè)函數(shù)來完成這個(gè)任務(wù),然后用 apply 函數(shù)來修改一列的值。

def add_numbers(x):
    return f'{x}01'
df[0] = df[0].apply(add_numbers)
IN[1]: print (df)
OUT[1]:     0   1   2
        0  101  2   3
        1  401  5   6
        2  701  8   9

這并不復(fù)雜,但是在數(shù)據(jù)框中對(duì)每一個(gè)改變創(chuàng)建一個(gè)函數(shù)是不切實(shí)際的。這時(shí)lambda就派上了用場。

lambda函數(shù)類似于普通的Python函數(shù),但它可以不使用名稱來定義,這使得它成為一個(gè)漂亮的單行代碼。之前使用的代碼可以用以下方式來減少。

df[0] = df[0].apply(lambda x:f'{x}01')

當(dāng)你不知道是否可以訪問一個(gè)系列的屬性來修改數(shù)據(jù)時(shí),Lambda變得非常有用。

例如,列0包含字母,我們想把它們大寫。

# 如果你知道.str的存在,你可以這樣做
df[0] = df[0].str.title()
# 如果你不知道.str,你仍然可以用lambda大寫
df[0] = df[0].apply(lambda x: x.title())

2. 使用f-string來連接字符串

字符串連接是Python中非常常見的操作,它可以用不同的方法來完成。最常見的方法是使用+運(yùn)算符;然而,這個(gè)運(yùn)算符的一個(gè)問題是我們不能在字符串之間添加任何分隔符。

當(dāng)然,如果你想把 "Hello "和 "World "連接起來,一個(gè)典型的變通方法是添加一個(gè)空白分隔符(" ")。

print("Hello" + " " + "World")

這就完成了工作,但為了寫出更可讀的代碼,我們可以用一個(gè)f-string來代替它。

IN[2]: print(f'{Hello} {World}')
OUT[2]: "Hello World"

在一個(gè)基本的例子中,這似乎是不必要的,但是當(dāng)涉及到連接多個(gè)值時(shí)(正如你將在提示#3中看到的),f-string將使你免于書寫多次+ " " +。我不知道過去有多少次不得不寫+運(yùn)算符,但現(xiàn)在不會(huì)了!

其他連接字符串的方法是使用join()方法或format()函數(shù),然而f-string在字符串連接方面做得更好。

3. 用Zip()函數(shù)對(duì)多個(gè)列表進(jìn)行迭代

你是否曾經(jīng)想在 Python 中循環(huán)遍歷一個(gè)以上的列表?當(dāng)你有兩個(gè)列表時(shí),你可以用 enumerate 來實(shí)現(xiàn)。

teams = ['Barcelona', 'Bayern Munich', 'Chelsea']
leagues = ['La Liga', 'Bundesliga', 'Premiere League']
for i, team in enumerate(teams):
    league = leagues[i]
    print(f'{team} plays in {league}')

然而,當(dāng)你有兩個(gè)或更多的列表時(shí),這變得不切實(shí)際。一個(gè)更好的方法是使用zip()函數(shù)。zip()函數(shù)接收迭代數(shù)據(jù),將它們聚集在一個(gè)元組中,并返回之。

讓我們?cè)僭黾右粋€(gè)列表,看看zip()的威力!

teams = ['Barcelona', 'Bayern Munich', 'Chelsea']
leagues = ['La Liga', 'Bundesliga', 'Premiere League']
countries = ['Spain', 'Germany', 'UK']
for team, league, country in zip(teams, leagues, countries):
    print(f'{team} plays in {league}. Country: {country}')

上述代碼的輸出結(jié)果為:

Barcelona plays in La Liga. Country: Spain
Bayern Munich plays in Bundesliga. Country: Germany
Chelsea plays in Premiere League. Country: UK

此處你注意到我們?cè)谶@個(gè)例子中使用了f-string嗎?代碼變得更有可讀性,不是嗎?

4. 使用列表理解法

清洗和處理數(shù)據(jù)的一個(gè)常見步驟是修改現(xiàn)有的列表。比如,我們有以下需要大寫的列表:

words = ['california', 'florida', 'texas']

將words列表的每個(gè)元素大寫的典型方法是創(chuàng)建一個(gè)新的大寫列表,執(zhí)行一次 for 循環(huán),使用.title(),然后將每個(gè)修改的值附加到新的列表中。

capitalized = []
for word in words:
    capitalized.append(word.title())

然而,Pythonic的方法是使用列表理解來做到這一點(diǎn)。列表理解有一種優(yōu)雅的方法來制作列表。

你可以用一行代碼重寫上面的for循環(huán):

capitalized = [word.title() for word in words]

由此我們可以跳過第一個(gè)例子中的一些步驟,結(jié)果是一樣的。

5. 對(duì)文件對(duì)象使用with語句

當(dāng)在一個(gè)項(xiàng)目上工作時(shí),我們經(jīng)常會(huì)對(duì)文件進(jìn)行讀寫操作。最常見的方法是使用open()函數(shù)打開一個(gè)文件,它會(huì)創(chuàng)建一個(gè)我們可以操作的文件對(duì)象,然后作為一個(gè)習(xí)慣的做法,我們應(yīng)該使用close()關(guān)閉該文件對(duì)象。

f = open('dataset.txt', 'w')
f.write('new_data')
f.close()

這很容易記住,但有時(shí)寫了幾個(gè)小時(shí)的代碼,我們可能會(huì)忘記用f.close()關(guān)閉f文件。這時(shí),with語句就派上了用場。with語句將自動(dòng)關(guān)閉文件對(duì)象f,形式如下:

with open('dataset.txt', 'w') as f:
    f.write('new_data')

有了這個(gè),我們可以保持代碼的簡短。

你不需要用它來讀取CSV文件,因?yàn)槟憧梢杂胮andas的 pd.read_csv()輕松地讀取,但在讀取其他類型的文件時(shí),這仍然很有用。例如,從pickle文件中讀取數(shù)據(jù)時(shí)經(jīng)常使用它。

import pickle 
# 從pickle文件中讀取數(shù)據(jù)集
with open(‘test', ‘rb') as input:
    data = pickle.load(input)

6. 停止使用方括號(hào)來獲取字典項(xiàng), 利用.get()代替

比如,有以下一個(gè)字典:

person = {'name': 'John', 'age': 20}

我們可以通過person[name]和person[age]分別獲得姓名和年齡。但是,由于某種原因,我們想獲得一個(gè)不存在的鍵,如 "工資",運(yùn)行person[salary]會(huì)引發(fā)一個(gè)`KeyError'。

這時(shí),get()方法就有用了。如果鍵在字典中,get()方法返回指定鍵的值,但是如果沒有找到鍵,Python 將返回None。得益于此,你的代碼不會(huì)中斷。

person = {'name': 'John', 'age': 20}
print('Name: ', person.get('name'))
print('Age: ', person.get('age'))
print('Salary: ', person.get('salary'))

輸出結(jié)果如下:

Name:  John
Age:  20
Salary:  None

7. 多重賦值

你是否曾想減少用于創(chuàng)建多個(gè)變量、列表或字典的代碼行數(shù)?那么,你可以用多重賦值輕松做到這一點(diǎn)。

# 原始操作
a = 1
b = 2
c = 3
# 替代操作
a, b, c = 1, 2, 3
# 代替在不同行中創(chuàng)建多個(gè)列表
data_1 = []
data_2 = []
data_3 = []
data_4 = []
# 可以在一行中創(chuàng)建它們的多重賦值
data_1, data_2, data_3, data_4 = [], [], [], []
# 或者使用列表理解法
data_1, data_2, data_3, data_4 = [[] for i in range(4)]

原文鏈接:

https://towardsdatascience.com/7-tips-to-level-up-your-python-code-for-data-science-4a64dbccd86d

總結(jié)

到此這篇關(guān)于讓Python代碼簡潔的實(shí)用技巧的文章就介紹到這了,更多相關(guān)Python代碼簡潔技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python使用py2neo操作圖數(shù)據(jù)庫neo4j的方法詳解
  • python實(shí)現(xiàn)日歷效果
  • python利用文件讀寫編寫一個(gè)博客
  • Python爬蟲技術(shù)
  • 詳解python關(guān)于多級(jí)包之間的引用問題
  • Python學(xué)習(xí)開發(fā)之圖形用戶界面詳解
  • Python使用Py2neo創(chuàng)建Neo4j的節(jié)點(diǎn)、關(guān)系及路徑

標(biāo)簽:沈陽 樂山 長治 上海 紅河 新疆 滄州 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一些讓Python代碼簡潔的實(shí)用技巧總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    崇明县| 肇东市| 大英县| 金坛市| 焦作市| 河津市| 枣强县| 乌鲁木齐市| 新巴尔虎右旗| 洞口县| 雷山县| 三河市| 荔浦县| 双辽市| 德江县| 白银市| 通化市| 章丘市| 伊春市| 敖汉旗| 周口市| 溧水县| 麦盖提县| 米脂县| 沙田区| 新龙县| 大宁县| 江北区| 紫云| 张家界市| 花垣县| 莲花县| 渭源县| 宁夏| 福安市| 敦化市| 嘉兴市| 烟台市| 罗城| 邵东县| 金沙县|