還在抱怨pandas運(yùn)行速度慢?這幾個(gè)方法會(huì)顛覆你的看法

前言

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

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

我們知道pandas的兩個(gè)主要數(shù)據(jù)結(jié)構(gòu):dataframeseries样勃,我們對(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簡(jiǎn)直太慢了辫樱,其實(shí)對(duì)于pandas的一些操作也是有一定技巧的。

pandas是基于numpy庫(kù)的數(shù)組結(jié)構(gòu)上構(gòu)建的俊庇,并且它的很多操作都是(通過numpy或者pandas自身由Cpython實(shí)現(xiàn)并編譯成C的擴(kuò)展模塊)在C語(yǔ)言中實(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è)例子。

還在抱怨pandas運(yùn)行速度慢褐奴?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢匪补?這幾個(gè)方法會(huì)顛覆你的看法

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

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

還在抱怨pandas運(yùn)行速度慢捏境?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢毁葱?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢坡锡?這幾個(gè)方法會(huì)顛覆你的看法

結(jié)果只有0.032s,快了將近50倍窒所。原因是:我們設(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í)長(zhǎng)(小時(shí))而變化,如下:

還在抱怨pandas運(yùn)行速度慢悠反?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢梨水?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢疫诽?這幾個(gè)方法會(huì)顛覆你的看法

對(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引入itertuplesiterrows方法可以使效率更快瘫絮。這些都是一次產(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后效果如何胶台。

還在抱怨pandas運(yùn)行速度慢歼疮?這幾個(gè)方法會(huì)顛覆你的看法

語(yǔ)法方面:這樣的語(yǔ)法更明確,并且行值引用中的混亂更少概作,因此它更具可讀性腋妙。

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

Pandas的 .apply()方法

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

還在抱怨pandas運(yùn)行速度慢梦谜?這幾個(gè)方法會(huì)顛覆你的看法

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

但是荒澡,這還不是“非潮ㄈ瑁快”。一個(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ì)使事情更方便:

還在抱怨pandas運(yùn)行速度慢?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢膳犹?這幾個(gè)方法會(huì)顛覆你的看法

為了了解剛才代碼中發(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ì)爭(zhēng)辯說這個(gè)解決方案是不可擴(kuò)展的场钉。幸運(yùn)的是蚊俺,在這種情況下,你可以使用Pandas的pd.cut() 函數(shù)以編程方式執(zhí)行更多操作:

還在抱怨pandas運(yùn)行速度慢逛万?這幾個(gè)方法會(huì)顛覆你的看法

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

注意include_lowest參數(shù)表示第一個(gè)間隔是否應(yīng)該是包含左邊的(您希望在組中包含時(shí)間= 0)宇植。

這是一種完全矢量化的方式來獲得我們的預(yù)期結(jié)果得封,它在時(shí)間方面是最快的:

還在抱怨pandas運(yùn)行速度慢?這幾個(gè)方法會(huì)顛覆你的看法

到目前為止指郁,時(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庫(kù)之上設(shè)計(jì)的悯恍。這為你提供了更多的計(jì)算靈活性,因?yàn)镻andas可以與NumPy陣列和操作無縫銜接涮毫。

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

還在抱怨pandas運(yùn)行速度慢恬叹?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢?這幾個(gè)方法會(huì)顛覆你的看法

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

1. 使用向量化操作:沒有for循環(huán)的Pandas方法和函數(shù)循未。

2. 將.apply方法:與可調(diào)用方法一起使用蛉腌。

3. 使用.itertuples:從Python的集合模塊迭代DataFrame行作為namedTuples。

4. 使用.iterrows:迭代DataFrame行作為(index只厘,Series)對(duì)烙丛。雖然Pandas系列是一種靈活的數(shù)據(jù)結(jié)構(gòu),但將每一行構(gòu)建到一個(gè)系列中然后訪問它可能會(huì)很昂貴羔味。

5. 使用“element-by-element”循環(huán):使用df.loc或df.iloc一次更新一個(gè)單元格或行河咽。

還在抱怨pandas運(yùn)行速度慢?這幾個(gè)方法會(huì)顛覆你的看法

使用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文件中的方法:

還在抱怨pandas運(yùn)行速度慢敞曹?這幾個(gè)方法會(huì)顛覆你的看法

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

還在抱怨pandas運(yùn)行速度慢匪傍?這幾個(gè)方法會(huì)顛覆你的看法

數(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)目不夠快速岩睁,靈活捕儒,簡(jiǎn)單和直觀刘莹,請(qǐng)考慮重新考慮你使用該庫(kù)的方式。

這里探討的示例相當(dāng)簡(jiǎn)單净薛,但說明了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()來提高速度和語(yǔ)法恩敌。
  • Pandas有很多可選性纠炮,幾乎總有幾種方法可以從A到B。請(qǐng)注意這一點(diǎn)孝宗,比較不同方法的執(zhí)行方式因妇,并選擇在項(xiàng)目環(huán)境中效果最佳的路線猿诸。
  • 一旦建立了數(shù)據(jù)清理腳本梳虽,就可以通過使用HDFStore存儲(chǔ)中間結(jié)果來避免重新處理窜觉。
  • 將NumPy集成到Pandas操作中通迟鞔欤可以提高速度并簡(jiǎn)化語(yǔ)法特咆。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腻格,一起剝皮案震驚了整個(gè)濱河市菜职,隨后出現(xiàn)的幾起案子酬核,更是在濱河造成了極大的恐慌,老刑警劉巖举瑰,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡忍些,警方通過查閱死者的電腦和手機(jī)罢坝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門嘁酿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痹仙,“玉大人开仰,你說我怎么就攤上這事众弓「艄浚” “怎么了蜒滩?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵捡遍,是天一觀的道長(zhǎng)画株。 經(jīng)常有香客問我,道長(zhǎng)谓传,這世上最難降的妖魔是什么续挟? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任庸推,我火速辦了婚禮浇冰,結(jié)果婚禮上肘习,老公的妹妹穿的比我還像新娘。我一直安慰自己脖含,他們只是感情好养葵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布关拒。 她就那樣靜靜地躺著着绊,像睡著了一般熟尉。 火紅的嫁衣襯著肌膚如雪斤儿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音棚放,去河邊找鬼飘蚯。 笑死局骤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赘来。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嗦篱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了灸促?” 一聲冷哼從身側(cè)響起浴栽,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤典鸡,失蹤者是張志新(化名)和其女友劉穎坏晦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體英遭,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汁尺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年痴突,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辽装。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拾积,死狀恐怖拓巧,靈堂內(nèi)的尸體忽然破棺而出肛度,到底是詐尸還是另有隱情承耿,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布凛辣,位于F島的核電站蟀给,受9級(jí)特大地震影響阳堕,放射性物質(zhì)發(fā)生泄漏恬总。R本人自食惡果不足惜壹堰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一贱纠、第九天 我趴在偏房一處隱蔽的房頂上張望谆焊。 院中可真熱鬧辖试,春花似錦罐孝、人聲如沸莲兢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)炮车。三九已至,卻和暖如春纪隙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碘饼。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钠绍,地道東北人花沉。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓磷脯,卻偏偏與公主長(zhǎng)得像娩脾,于是被迫代替她去往敵國(guó)和親架曹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绑雄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,451評(píng)論 0 13
  • 如果你用Python語(yǔ)言做過任何的數(shù)據(jù)分析,那么可能會(huì)用到Pandas,一個(gè)由Wes McKinney寫的奇妙的分...
    遺忘_eea2閱讀 1,494評(píng)論 0 24
  • (文章待完善)注意1:pandas本身包含很多函數(shù)pandas.method(obj),通常簡(jiǎn)寫為pd.metho...
    馬爾代夫Maldives閱讀 5,612評(píng)論 0 15
  • 3深蹲蘸朋,深蹲啞鈴核无。舉玲。頸步走藕坯。 第四節(jié): 抱大腿走团南,兩組噪沙,半蹲走。舉啞鈴 第六節(jié) 相信時(shí)間的復(fù)利 1.嬰兒走兩組...
    youcare33閱讀 285評(píng)論 0 0
  • 概念(1)SIMDsingle instruction multiple data起初在ARM處理器上的應(yīng)用是基于...
    testfor閱讀 728評(píng)論 0 0