亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

11個Python Pandas小技巧分別是哪些

發布時間:2021-10-28 17:06:17 來源:億速云 閱讀:179 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關11個Python Pandas小技巧分別是哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

或許本文中的某些命令你早已知曉,只是沒意識到它還有這種打開方式。

Pandas是一個在Python中廣泛應用的數據分析包。市面上有很多關于Pandas的經典教程,但本文介紹幾個隱藏的炫酷小技巧,我相信這些會對你有所幫助。

1. read_csv

這是讀取數據的入門級命令。當要你所讀取的數據量特別大時,試著加上這個參數nrows =  5,就可以在載入全部數據前先讀取一小部分數據。如此一來,就可以避免選錯分隔符這樣的錯誤啦(數據不一定都是用逗號來分隔)。

(或者在linux系統中,你可以使用‘head’來展示任意文本文件的前五行:head -c 5 data.txt)

接下來,用 df.columns.tolist() 可以提取每一列并轉換成list。還可以加上usecols = [‘c1’, ‘c2’, …  ]來載入所需要的指定列。另外,如果你知道某些列的類型,你可以加上dtype = {‘c1’: str, ‘c2’: int, …}  ,這樣會加快載入的速度。加入這些參數的另一大好處是,如果這一列中同時含有字符串和數值類型,而你提前聲明把這一列看作是字符串,那么這一列作為主鍵來融合多個表時,就不會報錯了。

2. select_dtypes

如果已經在Python中完成了數據的預處理,這個命令可以幫你節省一定的時間。在讀取了表格之后,每一列的默認數據類型將會是bool,int64,float64,object,category,timedelta64,或者datetime64。首先你可以觀察一下大致情況,使用:

df.dtypes.value_counts()

來了解你的dataframe的每項數據類型,然后再使用:

df.select_dtypes(include=['float64', 'int64'])

獲取一個僅由數值類型組成的sub-dataframe。

3. copy

如果你沒聽說過它的話,我不得強調它的重要性。輸入下面的命令:

import pandas as pd df1 = pd.DataFrame({ 'a':[0,0,0], 'b': [1,1,1]}) df2 = df1 df2['a'] = df2['a'] + 1 df1.head()

你會發現df1已經發生了改變。這是因為df2 =  df1并不是生成一個df1的復制品并把它賦值給df2,而是設定一個指向df1的指針。所以只要是針對df2的改變,也會相應地作用在df1上。為了解決這個問題,你既可以這樣做:

df2 = df1.copy()

也可以這樣做:

from copy import deepcopy df2 = deepcopy(df1)

4. map

這個炫酷的命令讓你的數據轉換變得輕松。首先定義一個

dictionary,“key”是轉換前的舊值,而“values”是轉換后的新值。

level_map = {1: 'high', 2: 'medium', 3: 'low'} df['c_level'] = df['c'].map(level_map)

幾個適用情景:把True、False,轉換成1、0(為了建模);定義級別;使用字典編碼。

5. 用不用apply?

如果我們想在現有幾列的基礎上生成一個新列,并一同作為輸入,那么有時apply函數會相當有幫助。

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()

在上面的代碼中,我們定義了一個有兩個輸入變量的函數,并依靠apply函數使其作用到列“c1”和“c2”上。

但是apply函數在有些情況下實在是太慢了。如果你是想計算“c1”和“c2”列的***值,你當然可以這樣去做:

df['maximum'] = df.apply(lambda x: max(x['c1'], x['c2']), axis = 1)

但你會發現相比于以下命令,apply實在是慢太多了:

df['maximum'] = df[['c1','c2']].max(axis =1)

結論:如果你可以采用其他內置函數(他們一般速度更快),請不要使用apply。比如說,如果你想把“c”列的值近似取整,那么請用round(df[‘c’],  0)或df['c'],round(0)而不是上文的apply函數。

7. value counts

這個命令用于檢查值的分布。你想要檢查下“c”列中出現的值以及每個值所出現的頻率,可以使用:

df['c'].value_counts(

下面是一些有用的小技巧/參數:

  • normalize = True:查看每個值出現的頻率而不是頻次數。

  • dropna = False: 把缺失值也保留在這次統計中。

  • sort = False: 將數據按照值來排序而不是按照出現次數排序。

  • df[‘c].value_counts().reset_index(): 將這個統計表轉換成pandas的dataframe并且進行處理。

8. 缺失值的數量

當構建模型時,我們可能會去除包含過多缺失值或是全部是缺失值的行。這時可以使用.isnull()和.sum()來計算指定列缺失值的數量。

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()

在SQL中我們可以使用 SELECT * FROM … WHERE ID in (‘A001’,‘C022’,  …)來獲取含有指定ID的記錄。如果你也想在Pandas中做類似的事情,你可以使用:

df_filter = df['ID'].isin(['A001','C022',...]) df[df_filter]

10. 基于分位數分組

面對一列數值,你想將這一列的值進行分組,比如說最前面的5%放入組別一,5-20%放入組別二,20%-50%放入組別三,***的50%放入組別四。當然,你可以使用pandas.cut,但你也可以使用下面這種選擇:

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]

這種方法的運行速度很快(并沒有使用到apply函數)。

11. to_csv

這又是一個大家都會用的命令。我想在這里列出兩個小技巧。首先是

print(df[:5].to_csv())

你可以使用這個命令打印出將要輸出文件中的前五行記錄。

另一個技巧是用來處理整數值和缺失值混淆在一起的情況。如果一列含有缺失值和整數值,那么這一列的數據類型會變成float而不是int。當導出表格時,你可以加上float_format=&lsquo;%.0f&rsquo;以便將所有的浮點數近似成整數。當你想把所有列的輸出值都變成整數格式時,就可以使用這個技巧,這樣一來你就會告別所有數值后帶“.0”的煩惱。

看完上述內容,你們對11個Python Pandas小技巧分別是哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衢州市| 赤城县| 大庆市| 留坝县| 灌南县| 铁岭县| 青铜峡市| 龙川县| 固镇县| 巴马| 扶绥县| 江源县| 三亚市| 乐安县| 巴南区| 河间市| 嵊泗县| 德保县| 麦盖提县| 莆田市| 京山县| 威海市| 铜梁县| 班戈县| 革吉县| 大方县| 怀柔区| 浪卡子县| 合阳县| 南澳县| 锦州市| 五原县| 昌图县| 彝良县| 石首市| 稷山县| 镇坪县| 瑞昌市| 洛扎县| 涞水县| 长沙市|