欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas中運(yùn)行速度優(yōu)化的常用方法介紹

 更新時(shí)間:2025年03月25日 09:51:03   作者:懶大王愛吃狼  
這篇文章主要為大家詳細(xì)介紹了幾種pandas中常用到的方法,對(duì)于這些方法使用存在哪些需要注意的問題,以及如何對(duì)它們進(jìn)行速度提升,需要的小伙伴可以參考下

前言

當(dāng)大家談到數(shù)據(jù)分析時(shí),提及最多的語言就是Python和SQL。Python之所以適合數(shù)據(jù)分析,是因?yàn)樗泻芏嗟谌綇?qiáng)大的庫來協(xié)助,pandas就是其中之一。pandas的文檔中是這樣描述的:

“快速,靈活,富有表現(xiàn)力的數(shù)據(jù)結(jié)構(gòu),旨在使”關(guān)系“或”標(biāo)記“數(shù)據(jù)的使用既簡單又直觀。”

我們知道pandas的兩個(gè)主要數(shù)據(jù)結(jié)構(gòu):dataframe和series,我們對(duì)數(shù)據(jù)的一些操作都是基于這兩個(gè)數(shù)據(jù)結(jié)構(gòu)的。但在實(shí)際的使用中,我們可能很多時(shí)候會(huì)感覺運(yùn)行一些數(shù)據(jù)結(jié)構(gòu)的操作會(huì)異常的慢。一個(gè)操作慢幾秒可能看不出來什么,但是一整個(gè)項(xiàng)目中很多個(gè)操作加起來會(huì)讓整個(gè)開發(fā)工作效率變得很低。有的朋友抱怨pandas簡直太慢了,其實(shí)對(duì)于pandas的一些操作也是有一定技巧的。

pandas是基于numpy庫的數(shù)組結(jié)構(gòu)上構(gòu)建的,并且它的很多操作都是(通過numpy或者pandas自身由Cpython實(shí)現(xiàn)并編譯成C的擴(kuò)展模塊)在C語言中實(shí)現(xiàn)的。因此,如果正確使用pandas的話,它的運(yùn)行速度應(yīng)該是非常快的。

本篇將要介紹幾種pandas中常用到的方法,對(duì)于這些方法使用存在哪些需要注意的問題,以及如何對(duì)它們進(jìn)行速度提升。

  • 將datetime數(shù)據(jù)與時(shí)間序列一起使用的優(yōu)點(diǎn)
  • 進(jìn)行批量計(jì)算的最有效途徑
  • 通過HDFStore存儲(chǔ)數(shù)據(jù)節(jié)省時(shí)間

使用Datetime數(shù)據(jù)節(jié)省時(shí)間

我們來看一個(gè)例子。

>>> import pandas as pd
>>> pd.__version__
'0.23.1'

# 導(dǎo)入數(shù)據(jù)集
>>> df = pd.read_csv('demand_profile.csv')
>>> df.head()
     date_time  energy_kwh
0  1/1/13 0:00       0.586
1  1/1/13 1:00       0.580
2  1/1/13 2:00       0.572
3  1/1/13 3:00       0.596
4  1/1/13 4:00       0.592

從運(yùn)行上面代碼得到的結(jié)果來看,好像沒有什么問題。但實(shí)際上pandas和numpy都有一個(gè)dtypes 的概念。如果沒有特殊聲明,那么date_time將會(huì)使用一個(gè) object 的dtype類型,如下面代碼所示:

>>> df.dtypes
date_time      object
energy_kwh    float64
dtype: object

???????>>> type(df.iat[0, 0])
str

object 類型像一個(gè)大的容器,不僅僅可以承載 str,也可以包含那些不能很好地融進(jìn)一個(gè)數(shù)據(jù)類型的任何特征列。而如果我們將日期作為 str 類型就會(huì)極大的影響效率。

因此,對(duì)于時(shí)間序列的數(shù)據(jù)而言,我們需要讓上面的date_time列格式化為datetime對(duì)象數(shù)組(pandas稱之為時(shí)間戳)。pandas在這里操作非常簡單,操作如下:

>>> df['date_time'] = pd.to_datetime(df['date_time'])
>>> df['date_time'].dtype
datetime64[ns]

我們來運(yùn)行一下這個(gè)df看看轉(zhuǎn)化后的效果是什么樣的。

>>> df.head()
               date_time    energy_kwh
0    2013-01-01 00:00:00         0.586
1    2013-01-01 01:00:00         0.580
2    2013-01-01 02:00:00         0.572
3    2013-01-01 03:00:00         0.596
4    2013-01-01 04:00:00         0.592

date_time的格式已經(jīng)自動(dòng)轉(zhuǎn)化了,但這還沒完,在這個(gè)基礎(chǔ)上,我們還是可以繼續(xù)提高運(yùn)行速度的。如何提速呢?為了更好的對(duì)比,我們首先通過 timeit 裝飾器來測(cè)試一下上面代碼的轉(zhuǎn)化時(shí)間。

>>> @timeit(repeat=3, number=10)
... def convert(df, column_name):
...     return pd.to_datetime(df[column_name])

>>> df['date_time'] = convert(df, 'date_time')
Best of 3 trials with 10 function calls per trial:
Function `convert` ran in average of 1.610 seconds.

1.61s,看上去挺快,但其實(shí)可以更快,我們來看一下下面的方法。

>>> @timeit(repeat=3, number=100)
>>> def convert_with_format(df, column_name):
...     return pd.to_datetime(df[column_name],
...                           format='%d/%m/%y %H:%M')
Best of 3 trials with 100 function calls per trial:
Function `convert_with_format` ran in average of 0.032 seconds.

**結(jié)果只有0.032s,快了將近50倍。**原因是:我們?cè)O(shè)置了轉(zhuǎn)化的格式format。由于在CSV中的datetimes并不是 ISO 8601 格式的,如果不進(jìn)行設(shè)置的話,那么pandas將使用 dateutil 包把每個(gè)字符串str轉(zhuǎn)化成date日期。

相反,如果原始數(shù)據(jù)datetime已經(jīng)是 ISO 8601 格式了,那么pandas就可以立即使用最快速的方法來解析日期。這也就是為什么提前設(shè)置好格式format可以提升這么多。

pandas數(shù)據(jù)的循環(huán)操作

仍然基于上面的數(shù)據(jù),我們想添加一個(gè)新的特征,但這個(gè)新的特征是基于一些時(shí)間條件的,根據(jù)時(shí)長(小時(shí))而變化,如下:

因此,按照我們正常的做法就是使用apply方法寫一個(gè)函數(shù),函數(shù)里面寫好時(shí)間條件的邏輯代碼。

def apply_tariff(kwh, hour):
 """計(jì)算每個(gè)小時(shí)的電費(fèi)"""  
    if 0 <= hour < 7:
        rate = 12
    elif 7 <= hour < 17:
        rate = 20
    elif 17 <= hour < 24:
        rate = 28
    else:
        raise ValueError(f'Invalid hour: {hour}')
    return rate * kwh

然后使用for循環(huán)來遍歷df,根據(jù)apply函數(shù)邏輯添加新的特征,如下:

>>> # 不贊同這種操作
>>> @timeit(repeat=3, number=100)
... def apply_tariff_loop(df):
...     """Calculate costs in loop.  Modifies `df` inplace."""
...     energy_cost_list = []
...     for i in range(len(df)):
...         # 獲取用電量和時(shí)間(小時(shí))
...         energy_used = df.iloc[i]['energy_kwh']
...         hour = df.iloc[i]['date_time'].hour
...         energy_cost = apply_tariff(energy_used, hour)
...         energy_cost_list.append(energy_cost)
...     df['cost_cents'] = energy_cost_list
... 
>>> apply_tariff_loop(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_loop` ran in average of 3.152 seconds.

對(duì)于那些寫Pythonic風(fēng)格的人來說,這個(gè)設(shè)計(jì)看起來很自然。然而,這個(gè)循環(huán)將會(huì)嚴(yán)重影響效率,也是不贊同這么做。原因有幾個(gè):

  • 首先,它需要初始化一個(gè)將記錄輸出的列表。
  • 其次,它使用不透明對(duì)象范圍(0,len(df))循環(huán),然后在應(yīng)用apply_tariff()之后,它必須將結(jié)果附加到用于創(chuàng)建新DataFrame列的列表中。它還使用df.iloc [i] ['date_time']執(zhí)行所謂的鏈?zhǔn)剿饕?,這通常會(huì)導(dǎo)致意外的結(jié)果。
  • 但這種方法的最大問題是計(jì)算的時(shí)間成本。對(duì)于8760行數(shù)據(jù),此循環(huán)花費(fèi)了3秒鐘。接下來,你將看到一些改進(jìn)的Pandas結(jié)構(gòu)迭代解決方案。

使用itertuples() 和iterrows() 循環(huán)

那么推薦做法是什么樣的呢?

實(shí)際上可以通過pandas引入itertuples和iterrows方法可以使效率更快。這些都是一次產(chǎn)生一行的生成器方法,類似scrapy中使用的yield用法。

.itertuples為每一行產(chǎn)生一個(gè)namedtuple,并且行的索引值作為元組的第一個(gè)元素。nametuple是Python的collections模塊中的一種數(shù)據(jù)結(jié)構(gòu),其行為類似于Python元組,但具有可通過屬性查找訪問的字段。

.iterrows為DataFrame中的每一行產(chǎn)生(index,series)這樣的元組。

雖然.itertuples往往會(huì)更快一些,但是在這個(gè)例子中使用.iterrows,我們看看這使用iterrows后效果如何。

>>> @timeit(repeat=3, number=100)
... def apply_tariff_iterrows(df):
...     energy_cost_list = []
...     for index, row in df.iterrows():
...         # 獲取用電量和時(shí)間(小時(shí))
...         energy_used = row['energy_kwh']
...         hour = row['date_time'].hour
...         # 添加cost列表
...         energy_cost = apply_tariff(energy_used, hour)
...         energy_cost_list.append(energy_cost)
...     df['cost_cents'] = energy_cost_list
...
>>> apply_tariff_iterrows(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_iterrows` ran in average of 0.713 seconds.

語法方面:這樣的語法更明確,并且行值引用中的混亂更少,因此它更具可讀性。

在時(shí)間收益方面:快了近5倍! 但是,還有更多的改進(jìn)空間。我們?nèi)匀辉谑褂媚撤N形式的Python for循環(huán),這意味著每個(gè)函數(shù)調(diào)用都是在Python中完成的,理想情況是它可以用Pandas內(nèi)部架構(gòu)中內(nèi)置的更快的語言完成。

Pandas的 .apply()方法

我們可以使用.apply方法而不是.iterrows進(jìn)一步改進(jìn)此操作。Pandas的.apply方法接受函數(shù)(callables)并沿DataFrame的軸(所有行或所有列)應(yīng)用它們。在此示例中,lambda函數(shù)將幫助你將兩列數(shù)據(jù)傳遞給apply_tariff():

>>> @timeit(repeat=3, number=100)
... def apply_tariff_withapply(df):
...     df['cost_cents'] = df.apply(
...         lambda row: apply_tariff(
...             kwh=row['energy_kwh'],
...             hour=row['date_time'].hour),
...         axis=1)
...
>>> apply_tariff_withapply(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_withapply` ran in average of 0.272 seconds.

.apply的語法優(yōu)點(diǎn)很明顯,行數(shù)少,代碼可讀性高。在這種情況下,所花費(fèi)的時(shí)間大約是.iterrows方法的一半。

但是,這還不是“非???rdquo;。一個(gè)原因是.apply()將在內(nèi)部嘗試循環(huán)遍歷Cython迭代器。但是在這種情況下,傳遞的lambda不是可以在Cython中處理的東西,因此它在Python中調(diào)用,因此并不是那么快。

如果你使用.apply()獲取10年的小時(shí)數(shù)據(jù),那么你將需要大約15分鐘的處理時(shí)間。如果這個(gè)計(jì)算只是大型模型的一小部分,那么你真的應(yīng)該加快速度。這也就是矢量化操作派上用場(chǎng)的地方。

矢量化操作:使用.isin()選擇數(shù)據(jù)

什么是矢量化操作?如果你不基于一些條件,而是可以在一行代碼中將所有電力消耗數(shù)據(jù)應(yīng)用于該價(jià)格(df ['energy_kwh'] * 28),類似這種。這個(gè)特定的操作就是矢量化操作的一個(gè)例子,它是在Pandas中執(zhí)行的最快方法。

但是如何將條件計(jì)算應(yīng)用為Pandas中的矢量化運(yùn)算?一個(gè)技巧是根據(jù)你的條件選擇和分組DataFrame,然后對(duì)每個(gè)選定的組應(yīng)用矢量化操作。 在下一個(gè)示例中,你將看到如何使用Pandas的.isin()方法選擇行,然后在向量化操作中實(shí)現(xiàn)上面新特征的添加。在執(zhí)行此操作之前,如果將date_time列設(shè)置為DataFrame的索引,則會(huì)使事情更方便:

df.set_index('date_time', inplace=True)

@timeit(repeat=3, number=100)
def apply_tariff_isin(df):
# 定義小時(shí)范圍Boolean數(shù)組
    peak_hours = df.index.hour.isin(range(17, 24))
    shoulder_hours = df.index.hour.isin(range(7, 17))
    off_peak_hours = df.index.hour.isin(range(0, 7))

???????    # 使用上面的定義
    df.loc[peak_hours, 'cost_cents'] = df.loc[peak_hours, 'energy_kwh'] * 28
    df.loc[shoulder_hours,'cost_cents'] = df.loc[shoulder_hours, 'energy_kwh'] * 20
    df.loc[off_peak_hours,'cost_cents'] = df.loc[off_peak_hours, 'energy_kwh'] * 12

我們來看一下結(jié)果如何。

>>> apply_tariff_isin(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_isin` ran in average of 0.010 seconds.

為了了解剛才代碼中發(fā)生的情況,我們需要知道.isin()方法返回的是一個(gè)布爾值數(shù)組,如下所示:

[False, False, False, ..., True, True, True]

這些值標(biāo)識(shí)哪些DataFrame索引(datetimes)落在指定的小時(shí)范圍內(nèi)。然后,當(dāng)你將這些布爾數(shù)組傳遞給DataFrame的.loc索引器時(shí),你將獲得一個(gè)僅包含與這些小時(shí)匹配的行的DataFrame切片。在那之后,僅僅是將切片乘以適當(dāng)?shù)馁M(fèi)率,這是一種快速的矢量化操作。

這與我們上面的循環(huán)操作相比如何?首先,你可能會(huì)注意到不再需要apply_tariff(),因?yàn)樗袟l件邏輯都應(yīng)用于行的選擇。因此,你必須編寫的代碼行和調(diào)用的Python代碼會(huì)大大減少。

處理時(shí)間怎么樣?比不是Pythonic的循環(huán)快315倍,比.iterrows快71倍,比.apply快27倍。

還可以做的更好嗎?

在apply_tariff_isin中,我們?nèi)匀豢梢酝ㄟ^調(diào)用df.loc和df.index.hour.isin三次來進(jìn)行一些“手動(dòng)工作”。如果我們有更精細(xì)的時(shí)隙范圍,你可能會(huì)爭辯說這個(gè)解決方案是不可擴(kuò)展的。幸運(yùn)的是,在這種情況下,你可以使用Pandas的pd.cut() 函數(shù)以編程方式執(zhí)行更多操作:

@timeit(repeat=3, number=100)
def apply_tariff_cut(df):
    cents_per_kwh = pd.cut(x=df.index.hour,
                           bins=[0, 7, 17, 24],
                           include_lowest=True,
                           labels=[12, 20, 28]).astype(int)
    df['cost_cents'] = cents_per_kwh * df['energy_kwh']

讓我們看看這里發(fā)生了什么。pd.cut() 根據(jù)每小時(shí)所屬的bin應(yīng)用一組標(biāo)簽(costs)。

注意include_lowest參數(shù)表示第一個(gè)間隔是否應(yīng)該是包含左邊的(您希望在組中包含時(shí)間= 0)。 這是一種完全矢量化的方式來獲得我們的預(yù)期結(jié)果,它在時(shí)間方面是最快的:

>>> apply_tariff_cut(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_cut` ran in average of 0.003 seconds. 

到目前為止,時(shí)間上基本快達(dá)到極限了,只需要花費(fèi)不到一秒的時(shí)間來處理完整的10年的小時(shí)數(shù)據(jù)集。但是,最后一個(gè)選項(xiàng)是使用 NumPy 函數(shù)來操作每個(gè)DataFrame的底層NumPy數(shù)組,然后將結(jié)果集成回Pandas數(shù)據(jù)結(jié)構(gòu)中。

使用Numpy繼續(xù)加速

使用Pandas時(shí)不應(yīng)忘記的一點(diǎn)是Pandas Series和DataFrames是在NumPy庫之上設(shè)計(jì)的。這為你提供了更多的計(jì)算靈活性,因?yàn)镻andas可以與NumPy陣列和操作無縫銜接。

下面,我們將使用NumPy的 digitize() 函數(shù)。它類似于Pandas的cut(),因?yàn)閿?shù)據(jù)將被分箱,但這次它將由一個(gè)索引數(shù)組表示,這些索引表示每小時(shí)所屬的bin。然后將這些索引應(yīng)用于價(jià)格數(shù)組:

@timeit(repeat=3, number=100)
def apply_tariff_digitize(df):
    prices = np.array([12, 20, 28])
    bins = np.digitize(df.index.hour.values, bins=[7, 17, 24])
    df['cost_cents'] = prices[bins] * df['energy_kwh'].values

與cut函數(shù)一樣,這種語法非常簡潔易讀。但它在速度方面有何比較?讓我們來看看:

>>> apply_tariff_digitize(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_digitize` ran in average of 0.002 seconds.

在這一點(diǎn)上,仍然有性能提升,但它本質(zhì)上變得更加邊緣化。使用Pandas,它可以幫助維持“層次結(jié)構(gòu)”,如果你愿意,可以像在此處一樣進(jìn)行批量計(jì)算,這些通常排名從最快到最慢(最靈活到最不靈活):

  • 使用向量化操作:沒有for循環(huán)的Pandas方法和函數(shù)。
  • 將.apply方法:與可調(diào)用方法一起使用。
  • 使用.itertuples:從Python的集合模塊迭代DataFrame行作為namedTuples。
  • 使用.iterrows:迭代DataFrame行作為(index,Series)對(duì)。雖然Pandas系列是一種靈活的數(shù)據(jù)結(jié)構(gòu),但將每一行構(gòu)建到一個(gè)系列中然后訪問它可能會(huì)很昂貴。
  • 使用“element-by-element”循環(huán):使用df.loc或df.iloc一次更新一個(gè)單元格或行。

使用HDFStore防止重新處理

現(xiàn)在你已經(jīng)了解了Pandas中的加速數(shù)據(jù)流程,接著讓我們探討如何避免與最近集成到Pandas中的HDFStore一起重新處理時(shí)間。

通常,在構(gòu)建復(fù)雜數(shù)據(jù)模型時(shí),可以方便地對(duì)數(shù)據(jù)進(jìn)行一些預(yù)處理。例如,如果您有10年的分鐘頻率耗電量數(shù)據(jù),即使你指定格式參數(shù),只需將日期和時(shí)間轉(zhuǎn)換為日期時(shí)間可能需要20分鐘。你真的只想做一次,而不是每次運(yùn)行你的模型,進(jìn)行測(cè)試或分析。

你可以在此處執(zhí)行的一項(xiàng)非常有用的操作是預(yù)處理,然后將數(shù)據(jù)存儲(chǔ)在已處理的表單中,以便在需要時(shí)使用。但是,如何以正確的格式存儲(chǔ)數(shù)據(jù)而無需再次重新處理?如果你要另存為CSV,則只會(huì)丟失datetimes對(duì)象,并且在再次訪問時(shí)必須重新處理它。

Pandas有一個(gè)內(nèi)置的解決方案,它使用 HDF5,這是一種專門用于存儲(chǔ)表格數(shù)據(jù)陣列的高性能存儲(chǔ)格式。 Pandas的 HDFStore 類允許你將DataFrame存儲(chǔ)在HDF5文件中,以便可以有效地訪問它,同時(shí)仍保留列類型和其他元數(shù)據(jù)。它是一個(gè)類似字典的類,因此您可以像讀取Python dict對(duì)象一樣進(jìn)行讀寫。

以下是將預(yù)處理電力消耗DataFrame df存儲(chǔ)在HDF5文件中的方法:

# 創(chuàng)建儲(chǔ)存對(duì)象,并存為 processed_data
data_store = pd.HDFStore('processed_data.h5')

# 將 DataFrame 放進(jìn)對(duì)象中,并設(shè)置 key 為 preprocessed_df
data_store['preprocessed_df'] = df
data_store.close()

現(xiàn)在,你可以關(guān)閉計(jì)算機(jī)并休息一下。等你回來的時(shí)候,你處理的數(shù)據(jù)將在你需要時(shí)為你所用,而無需再次加工。以下是如何從HDF5文件訪問數(shù)據(jù),并保留數(shù)據(jù)類型:

# 獲取數(shù)據(jù)儲(chǔ)存對(duì)象
data_store = pd.HDFStore('processed_data.h5')

???????# 通過key獲取數(shù)據(jù)
preprocessed_df = data_store['preprocessed_df']
data_store.close()

數(shù)據(jù)存儲(chǔ)可以容納多個(gè)表,每個(gè)表的名稱作為鍵。

關(guān)于在Pandas中使用HDFStore的注意事項(xiàng):您需要安裝PyTables> = 3.0.0,因此在安裝Pandas之后,請(qǐng)確保更新PyTables,如下所示:

pip install --upgrade tables

結(jié)論

如果你覺得你的Pandas項(xiàng)目不夠快速,靈活,簡單和直觀,請(qǐng)考慮重新考慮你使用該庫的方式。

這里探討的示例相當(dāng)簡單,但說明了Pandas功能的正確應(yīng)用如何能夠大大改進(jìn)運(yùn)行時(shí)和速度的代碼可讀性。以下是一些經(jīng)驗(yàn),可以在下次使用Pandas中的大型數(shù)據(jù)集時(shí)應(yīng)用這些經(jīng)驗(yàn)法則:

  • 嘗試盡可能使用矢量化操作,而不是在df 中解決for x的問題。如果你的代碼是許多for循環(huán),那么它可能更適合使用本機(jī)Python數(shù)據(jù)結(jié)構(gòu),因?yàn)镻andas會(huì)帶來很多開銷。
  • 如果你有更復(fù)雜的操作,其中矢量化根本不可能或太難以有效地解決,請(qǐng)使用.apply方法。
  • 如果必須循環(huán)遍歷數(shù)組(確實(shí)發(fā)生了這種情況),請(qǐng)使用.iterrows()或.itertuples()來提高速度和語法。
  • Pandas有很多可選性,幾乎總有幾種方法可以從A到B。請(qǐng)注意這一點(diǎn),比較不同方法的執(zhí)行方式,并選擇在項(xiàng)目環(huán)境中效果最佳的路線。
  • 一旦建立了數(shù)據(jù)清理腳本,就可以通過使用HDFStore存儲(chǔ)中間結(jié)果來避免重新處理。
  • 將NumPy集成到Pandas操作中通??梢蕴岣咚俣炔⒑喕Z法。

到此這篇關(guān)于Pandas中運(yùn)行速度優(yōu)化的常用方法介紹的文章就介紹到這了,更多相關(guān)Pandas運(yùn)行速度優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測(cè)的實(shí)現(xiàn)

    使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測(cè)的實(shí)現(xiàn)

    這篇文章主要介紹了使用python進(jìn)行廣告點(diǎn)擊率的預(yù)測(cè)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python執(zhí)行shell腳本的四種方法

    python執(zhí)行shell腳本的四種方法

    在Python中提供了很多的方法可以調(diào)用并執(zhí)行shell腳本,本文主要介紹了python執(zhí)行shell腳本的四種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python如何進(jìn)入交互模式

    python如何進(jìn)入交互模式

    在本篇內(nèi)容中小編給大家分享了關(guān)于python進(jìn)入交互模式的方法,對(duì)此有需要的朋友們可以跟著學(xué)習(xí)下。
    2020-07-07
  • python實(shí)現(xiàn)漢諾塔算法

    python實(shí)現(xiàn)漢諾塔算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)漢諾塔算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python隨機(jī)生成帶特殊字符的密碼

    Python隨機(jī)生成帶特殊字符的密碼

    這篇文章主要介紹了Python隨機(jī)生成帶特殊字符的密碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Python實(shí)現(xiàn)簡單文本字符串處理的方法

    Python實(shí)現(xiàn)簡單文本字符串處理的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)簡單文本字符串處理的方法,涉及Python針對(duì)文本字符串的切割、計(jì)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 用Python爬取某乎手機(jī)APP數(shù)據(jù)

    用Python爬取某乎手機(jī)APP數(shù)據(jù)

    最近爬取的數(shù)據(jù)都是網(wǎng)頁端,今天來教大家如何爬取手機(jī)端app數(shù)據(jù)(本文以ios蘋果手機(jī)為例,其實(shí)安卓跟ios差不多)! 本文將以『某乎』為實(shí)戰(zhàn)案例,手把手教你從配置到代碼一步一步的爬取App數(shù)據(jù),需要的朋友可以參考下
    2021-06-06
  • Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析

    Python面向?qū)ο笾接袑傩院退接蟹椒☉?yīng)用案例分析

    這篇文章主要介紹了Python面向?qū)ο笾接袑傩院退接蟹椒?結(jié)合具體案例形式簡單分析了面向?qū)ο蟪绦蛟O(shè)計(jì)中私有屬性與私有方法的基本功能與使用注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Python樹莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作詳解

    Python樹莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作詳解

    這篇文章主要介紹了Python樹莓派學(xué)習(xí)筆記之UDP傳輸視頻幀操作,結(jié)合實(shí)例形式詳細(xì)分析了Python樹莓派編程中使用UDP協(xié)議進(jìn)行視頻幀傳輸?shù)南嚓P(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Python中tell()方法的使用詳解

    Python中tell()方法的使用詳解

    這篇文章主要介紹了Python中tell()方法的使用詳解,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05

最新評(píng)論