摘要:是一個(gè)廣泛用于結(jié)構(gòu)化數(shù)據(jù)的包。因此,的任何變化都會(huì)導(dǎo)致發(fā)生變化。這是檢查值分布的命令。這也是每個(gè)人都會(huì)使用的命令。我想在這里指出兩個(gè)技巧。另一個(gè)技巧是處理混合在一起的整數(shù)和缺失值。將所有浮點(diǎn)數(shù)舍入為整數(shù)。
Pandas是一個(gè)廣泛用于結(jié)構(gòu)化數(shù)據(jù)的Python包。本文將介紹一些讀者可能以前不知道的很實(shí)用的技巧。
read_csv每個(gè)人都知道這個(gè)命令。但是讀取的數(shù)據(jù)很大,可以嘗試添加這個(gè)參數(shù):nrows = 5以便在實(shí)際加載整個(gè)表之前讀取表的一小部分。然后你可以通過(guò)選擇錯(cuò)誤的分隔符來(lái)避免錯(cuò)誤(它可能不總是以逗號(hào)分隔)。或者,您可以在linux中使用"head"命令檢查任何文本文件中的前5行(比如說(shuō)):head -n 5 data.txt。
然后,您可以通過(guò)使用df.columns.tolist()提取所有列來(lái)提取列列表,然后添加usecols = ["c1","c2",...]參數(shù)來(lái)加載您需要的列。此外,如果您知道幾個(gè)特定列的數(shù)據(jù)類(lèi)型,則可以添加參數(shù)dtype = {"c1":str,"c2":int,...},以便加載更快。這個(gè)參數(shù)的另一個(gè)優(yōu)點(diǎn)是,如果您有一個(gè)同時(shí)包含字符串和數(shù)字的列,那么將它的類(lèi)型聲明為string是一個(gè)很好的實(shí)踐,這樣在試圖使用該列作為鍵合并表時(shí)就不會(huì)出現(xiàn)錯(cuò)誤。
select_dtypes如果數(shù)據(jù)預(yù)處理必須在Python中完成,那么這個(gè)命令可以節(jié)省你一些時(shí)間。讀入表后,每列的默認(rèn)數(shù)據(jù)類(lèi)型可以是bool,int64,float64,object,category,timedelta64或datetime64。您可以先用df.dtypes.value_counts(),要了解數(shù)據(jù)幀的所有可能數(shù)據(jù)類(lèi)型,然后執(zhí)行df.select_dtypes(include=["float64", "int64"])
選擇僅具有數(shù)字特征的子數(shù)據(jù)幀。
copy如果您還沒(méi)有聽(tīng)說(shuō)過(guò),這是一個(gè)重要的命令。如果執(zhí)行以下命令:
import pandas as pd df1 = pd.DataFrame({ "a":[0,0,0], "b": [1,1,1]}) df2 = df1 df2["a"] = df2["a"] + 1 df1.head()
你會(huì)發(fā)現(xiàn)df1已經(jīng)改變了。這是因?yàn)閐f2 = df1沒(méi)有復(fù)制df1并將其分配給df2,而是設(shè)置指向df1的指針。因此,df2的任何變化都會(huì)導(dǎo)致df1發(fā)生變化。要解決這個(gè)問(wèn)題,你可以使用任何一種方法
df2 = df1.copy()
或
from copy import deepcopy df2 = deepcopy(df1)map
這個(gè)命令可以很容易的進(jìn)行數(shù)據(jù)轉(zhuǎn)換。首先定義一個(gè)字典,其中"keys"是舊值,"values"是新值。
level_map = {1: "high", 2: "medium", 3: "low"} df["c_level"] = df["c"].map(level_map)
一些例子:True, False to 1, 0 (for modeling); defining levels; user defined lexical encodings.
apply or not apply?如果我們想創(chuàng)建一個(gè)包含其他幾列作為輸入的新列,那么apply函數(shù)有時(shí)非常有用。
def rule(x, y): if x == "high" and y > 10: return 1 else: return 0 df = pd.DataFrame({ "c1":[ "high" ,"high", "low", "low"], "c2": [0, 23, 17, 4]}) df["new"] = df.apply(lambda x: rule(x["c1"], x["c2"]), axis = 1) df.head()
在上面的代碼中,我們定義了一個(gè)帶有兩個(gè)輸入變量的函數(shù),并使用apply函數(shù)將它應(yīng)用于列"c1"和"c2"。
但“應(yīng)用”的問(wèn)題是它有時(shí)太慢了。如果你想計(jì)算兩列“c1”和“c2”的最大值,你當(dāng)然可以這樣做
df["maximum"] = df.apply(lambda x: max(x["c1"], x["c2"]), axis = 1)
但你會(huì)發(fā)現(xiàn)它比這個(gè)命令慢得多:
df["maximum"] = df[["c1","c2"]].max(axis =1)
愿碼提示:如果您可以使用其他內(nèi)置函數(shù)完成相同的工作(它們通常更快),請(qǐng)不要使用apply。例如,如果要將列"c"舍入為整數(shù),請(qǐng)執(zhí)行round(df ["c"],0)或df ["c"]。round(0)而不是使用apply函數(shù):df.apply(lambda x: round(x["c"], 0), axis = 1)。
value counts這是檢查值分布的命令。例如,如果您想檢查“c”列中每個(gè)值的可能值和頻率,您可以執(zhí)行此操作:df["c"].value_counts()
還有就是它的一些有用的技巧/參數(shù):
A. normalize = True:如果您想檢查頻率而不是計(jì)數(shù)。
B. dropna = False:如果您還想在統(tǒng)計(jì)中包含缺失的值。
C. df["c"].value_counts().reset_index():如果希望將stats表轉(zhuǎn)換為panda數(shù)據(jù)aframe并對(duì)其進(jìn)行操作。
D. df["c"].value_counts().reset_index().sort_values(by="index"):在"c"列中顯示按不同值排序的統(tǒng)計(jì)信息,而不是count。
構(gòu)建模型時(shí),您可能希望排除具有太多缺失值的行/具有所有缺失值的行。您可以使用.isnull()和.sum()來(lái)計(jì)算指定列中缺失值的數(shù)量。
import pandas as pd import numpy as np df = pd.DataFrame({ "id": [1,2,3], "c1":[0,0,np.nan], "c2": [np.nan,1,1]}) df = df[["id", "c1", "c2"]] df["num_nulls"] = df[["c1", "c2"]].isnull().sum(axis=1) df.head()select rows with specific IDs
在SQL中,我們可以使用SELECT * FROM ... WHERE ID("A001","C022",...)來(lái)獲取具有特定ID的記錄。如果你想用熊貓做同樣的事情,你可以做到
df_filter = df["ID"].isin(["A001","C022",...]) df[df_filter]Percentile groups
您有一個(gè)數(shù)字列,并希望將該列中的值分類(lèi)為組,例如前5%進(jìn)入組1,5-20%進(jìn)入組2,20%-50%進(jìn)入組3,將底部50%歸入組4當(dāng)然,你可以用pandas.cut來(lái)做,但我想在這里提供另一種選擇:
import numpy as np cut_points = [np.percentile(df["c"], i) for i in [50, 80, 95]] df["group"] = 1 for i in range(3): df["group"] = df["group"] + (df["c"] < cut_points[i]) # or <= cut_points[i]
這是快速運(yùn)行(沒(méi)有使用應(yīng)用功能)。
to_csv這也是每個(gè)人都會(huì)使用的命令。我想在這里指出兩個(gè)技巧。第一個(gè)是:print(df[:5].to_csv())
您可以使用此命令打印出準(zhǔn)確寫(xiě)入文件的前五行。
另一個(gè)技巧是處理混合在一起的整數(shù)和缺失值。如果列包含缺失值和整數(shù),則數(shù)據(jù)類(lèi)型仍將是float而不是int。導(dǎo)出表時(shí),可以添加float_format ="%。0f"將所有浮點(diǎn)數(shù)舍入為整數(shù)。如果您只想要所有列的整數(shù)輸出,請(qǐng)使用此技巧 - 您將擺脫所有惱人的".0"。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43761.html
摘要:在本節(jié)中,我們將看到一些最流行和最常用的庫(kù),用于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)是用于數(shù)據(jù)挖掘,分析和機(jī)器學(xué)習(xí)的最流行的庫(kù)。愿碼提示網(wǎng)址是一個(gè)基于的框架,用于使用多個(gè)或進(jìn)行有效的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000018961827?w=999&h=562); 來(lái)源 | 愿碼(ChainDesk.CN)內(nèi)容編輯...
摘要:在這些情況下,了解如何從標(biāo)準(zhǔn)列表或字典創(chuàng)建會(huì)很有幫助。大多數(shù)人會(huì)注意到列的順序看起來(lái)不對(duì)。這個(gè)問(wèn)題出現(xiàn)的原因是標(biāo)準(zhǔn)的字典不保留其鍵的順序。列表從創(chuàng)建的另一個(gè)選擇是將數(shù)據(jù)包含在列表結(jié)構(gòu)中。 介紹 每當(dāng)我使用pandas進(jìn)行分析時(shí),我的第一個(gè)目標(biāo)是使用眾多可用選項(xiàng)中的一個(gè)將數(shù)據(jù)導(dǎo)入Pandas的DataFrame 。對(duì)于絕大多數(shù)情況下,我使用的 read_excel , read_csv ...
摘要:忘記使用進(jìn)行,從導(dǎo)入數(shù)據(jù)文件第部分對(duì)于每個(gè)網(wǎng)站而言,并不總是適合您,但將永遠(yuǎn)與您保持聯(lián)系以從任何網(wǎng)站收集任何類(lèi)型的數(shù)據(jù)。非資源讓我們拿一個(gè)維基百科頁(yè)面進(jìn)行報(bào)廢。請(qǐng)求它旨在被人類(lèi)用于與語(yǔ)言進(jìn)行通信。使用標(biāo)簽,我們將告訴保護(hù)我們的數(shù)據(jù)。忘記API使用Beautiful Soup進(jìn)行Python Scraping,從Web導(dǎo)入數(shù)據(jù)文件:第2部分 對(duì)于每個(gè)網(wǎng)站而言,API并不總是適合您,但Be...
摘要:忘記使用進(jìn)行,從導(dǎo)入數(shù)據(jù)文件第部分對(duì)于每個(gè)網(wǎng)站而言,并不總是適合您,但將永遠(yuǎn)與您保持聯(lián)系以從任何網(wǎng)站收集任何類(lèi)型的數(shù)據(jù)。非資源讓我們拿一個(gè)維基百科頁(yè)面進(jìn)行報(bào)廢。請(qǐng)求它旨在被人類(lèi)用于與語(yǔ)言進(jìn)行通信。使用標(biāo)簽,我們將告訴保護(hù)我們的數(shù)據(jù)。忘記API使用Beautiful Soup進(jìn)行Python Scraping,從Web導(dǎo)入數(shù)據(jù)文件:第2部分 對(duì)于每個(gè)網(wǎng)站而言,API并不總是適合您,但Be...
摘要:函數(shù)將單元格內(nèi)容以形式呈現(xiàn)。自動(dòng)評(píng)論代碼自動(dòng)注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。如果需要恢復(fù)整個(gè)已刪除的單元格,請(qǐng)按或撤消刪除單元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 編譯:小七、蔣寶尚 一些小提示和小技巧可能是非常有用的,特別是在編程領(lǐng)域。有時(shí)候使用一點(diǎn)點(diǎn)黑客技術(shù),既可...
閱讀 1106·2021-11-23 10:05
閱讀 1785·2021-11-12 10:36
閱讀 1853·2019-08-30 15:56
閱讀 1684·2019-08-29 12:32
閱讀 3043·2019-08-28 18:04
閱讀 3428·2019-08-26 12:17
閱讀 2502·2019-08-26 11:35
閱讀 1240·2019-08-23 15:11