新聞中心
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到蘿北網(wǎng)站設(shè)計(jì)與蘿北網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋蘿北地區(qū)。
作為一名數(shù)據(jù)分析師或數(shù)據(jù)科學(xué)家,不了解Python中的Pandas庫(kù)是無(wú)論如何說(shuō)不過(guò)去的,它已經(jīng)成為Python中用來(lái)整理、清理數(shù)據(jù)的標(biāo)準(zhǔn)工具了。
然而,關(guān)于Pandas,你確定自己完全掌握了嘛?本文將分享一些少見(jiàn)但有用的Pandas技巧,它們能提升工作效率,讓生活更輕松。
用剪貼板創(chuàng)建數(shù)據(jù)框
眾所周知,Pandas可以使用SQLAlchemy從CSV、JSON甚至直接從數(shù)據(jù)庫(kù)輕松讀取數(shù)據(jù),但你知道Pandas還可以從所用操作系統(tǒng)的剪貼板讀取數(shù)據(jù)嗎?假設(shè)有一個(gè)包含多個(gè)數(shù)據(jù)表的Excel文件?,F(xiàn)在,需要在Python中處理其中一個(gè)表的部分?jǐn)?shù)據(jù)。你通常會(huì)怎么做?
- 從數(shù)據(jù)表中復(fù)制需要在Python中處理的數(shù)據(jù)。
- 將其粘貼到另一個(gè)數(shù)據(jù)表中。
- 將當(dāng)前工作表保存到CSV文件中。
- 獲取新CSV文件的路徑。
- 在Python中,使用pd.read_csv('path/to/csv/file')將文件讀入一個(gè)Pandas數(shù)據(jù)框架。
當(dāng)然,其實(shí)有種更簡(jiǎn)單的方法——pd.read_clipboard()。
- 復(fù)制所需數(shù)據(jù)區(qū)域
- 在Python中,使用pd.read_clipboard()
如上所示,如果只是想要將一些數(shù)據(jù)加載到Pandas中,那么無(wú)需CSV或Excel的分離文件。
在該函數(shù)中還有一些小竅門(mén)。例如,當(dāng)遇到帶有日期格式的數(shù)據(jù)時(shí),可能無(wú)法正確加載,如下所示:
訣竅就是,為Pandas注明哪一列是需要解析的日期格式。
- df = pd.read_clipboard(parse_dates=['dob'])
使用測(cè)試方法生成虛擬數(shù)據(jù)
有時(shí)可能需要生成一些樣本數(shù)據(jù)幀,最常見(jiàn)的方法應(yīng)該是使用NumPy生成一個(gè)具有隨機(jī)值的數(shù)組,然后從該數(shù)組生成數(shù)據(jù)幀。
如果數(shù)據(jù)需要具有一定的分布,比如正態(tài)分布,就必須使用這種方法。但是,大多數(shù)情況下,數(shù)據(jù)是否呈正態(tài)分布并不重要,只要有數(shù)據(jù)就好。在這種情況下,有一種更簡(jiǎn)單的方法,即使用pandas.util.testing測(cè)試包生成樣本數(shù)據(jù)幀。
- pd.util.testing.makeDataFrame()
數(shù)據(jù)幀的索引將使用隨機(jī)字符串生成,默認(rèn)情況下將有4列30行。
如果需要數(shù)量相當(dāng)?shù)男泻土?,可以將testing.N定義為行數(shù),并將testing.K定義為列數(shù)。
- pd.util.testing.N = 10
- pd.util.testing.K = 5
- pd.util.testing.makeDataFrame()
將數(shù)據(jù)幀輸出至壓縮文件
圖源:unsplash
數(shù)據(jù)幀可以輕松輸出至文件,例如以df.to_csv()、df.to_json()等形式。但有時(shí),為節(jié)省磁盤(pán)空間或另作它用,需要壓縮文件。例如,作為一名數(shù)據(jù)工程師,為了將Pandas數(shù)據(jù)幀輸出到CSV文件中,并將其傳輸?shù)竭h(yuǎn)程服務(wù)器,在發(fā)送前需要壓縮文件以節(jié)省空間和帶寬。
通常,一貫的解決方案是在所用調(diào)度工具(如Airflow或Oozie)中多操作一步,但Pandas可以直接輸出壓縮文件。所以,解決方案幾步就可完成,更加簡(jiǎn)潔明了。
先使用第二個(gè)小竅門(mén)生成隨機(jī)數(shù)據(jù)幀吧:
- pd.util.testing.N = 100000
- pd.util.testing.K = 5
- df = pd.util.testing.makeDataFrame()
在該例子中,僅需要一個(gè)數(shù)據(jù)框架,其中的值可完全不計(jì)?,F(xiàn)在,將數(shù)據(jù)幀保存到一個(gè)CSV文件中,并檢查其大小。
- import osdf.to_csv('sample.csv')os.path.getsize('sample.csv')
然后,可以試試將相同的數(shù)據(jù)幀輸出到壓縮文件中,并檢查文件的大小。
- df.to_csv('sample.csv.gz', compression='gzip')os.path.getsize('sample.csv.gz')
可以看到,壓縮文件小于正常CSV文件的一半。
這可能不是一個(gè)好例子,因?yàn)樵撾S機(jī)數(shù)據(jù)幀中沒(méi)有任何重復(fù)值。在實(shí)踐中,如果存在分類(lèi)值,壓縮率會(huì)非常高!順便一提,如你所想,Pandas可以直接將壓縮文件讀入數(shù)據(jù)幀,無(wú)須在文件系統(tǒng)中解壓它。
- df = pd.read_csv('sample.csv.gz', compression='gzip', index_col=0)
gzip是優(yōu)先選擇,因?yàn)樗J(rèn)存在于大多數(shù)Linux系統(tǒng)中。Pandas還支持其它壓縮格式,比如“zip”和“bz2”。
多列獲取DateTime(時(shí)間日期)
圖源:unsplash
在Pandas中,你一定用過(guò)pd.to_datetime()方法將某種字符串轉(zhuǎn)換為DateTime格式,這通常用于處理諸如%Y%m%d的格式字符串。然而,也有時(shí)可能會(huì)使用下方所示的數(shù)據(jù)框架作為原始數(shù)據(jù)。
- df = pd.DataFrame({
- 'year': np.arange(2000, 2012),
- 'month': np.arange(1, 13),
- 'day': np.arange(1, 13),
- 'value': np.random.randn(12)
- })
在數(shù)據(jù)框架中,將年、月、日作為單獨(dú)列分隔開(kāi)來(lái)屢見(jiàn)不鮮,可以使用pd.to_dateframe()將其一步轉(zhuǎn)換為DateTime列。
- df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
本文分享了一些關(guān)于Pandas Python庫(kù)的省時(shí)小竅門(mén)。簡(jiǎn)而言之,人生苦短,Python值得。
文章題目:不常見(jiàn)的Pandas小竅門(mén):我打賭一定有你不知道的
網(wǎng)站鏈接:http://fisionsoft.com.cn/article/ccdgggs.html


咨詢(xún)
建站咨詢(xún)
