日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

frac函数_20个能够有效提高 Pandas数据分析效率的常用函数,附带解释和例子

發布時間:2025/3/13 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 frac函数_20个能够有效提高 Pandas数据分析效率的常用函数,附带解释和例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Pandas是一個受眾廣泛的python數據分析庫。它提供了許多函數和方法來加快數據分析過程。pandas之所以如此普遍,是因為它的功能強大、靈活簡單。
本文將介紹20個常用的 Pandas 函數以及具體的示例代碼,助力你的數據分析變得更加高效。

首先,我們導入 numpy和 pandas包。

import numpy as np
import pandas as pd

1. Query

我們有時需要根據條件篩選數據,一個簡單方法是query函數。
為了更直觀理解這個函數,我們首先創建一個示例 dataframe。

values_1 = np.random.randint(10, size=10)
values_2 = np.random.randint(10, size=10)
years = np.arange(2010,2020)
groups = ['A','A','B','A','B','B','C','A','C','C']
df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2})
df

使用query函數的語法十分簡單:

df.query('value_1 < value_2')

2. Insert

當我們想要在 dataframe 里增加一列數據時,默認添加在最后。當我們需要添加在任意位置,則可以使用 insert 函數。
使用該函數只需要指定插入的位置、列名稱、插入的對象數據。

# new column
new_col = np.random.randn(10)
# insert the new column at position 2
df.insert(2, 'new_col', new_col)
df

3. Cumsum

示例dataframe 包含3個小組的年度數據。我們可能只對年度數據感興趣,但在某些情況下,我們同樣還需要一個累計數據。Pandas提供了一個易于使用的函數來計算加和,即cumsum。

如果我們只是簡單使用cumsum函數,(A,B,C)組別將被忽略。這樣得到的累積值在某些情況下意義不大,因為我們更需要不同小組的累計數據。對于這個問題有一個非常簡單方便的解決方案,我們可以同時應用groupby和cumsum函數。

df['cumsum_2'] = df[['value_2','group'].groupby('group').cumsum()]
df

4. Sample

Sample方法允許我們從DataFrame中隨機選擇數據。當我們想從一個分布中選擇一個隨機樣本時,這個函數很有用。

sample1 = df.sample(n=3)
sample1

上述代碼中,我們通過指定采樣數量 n 來進行隨機選取。此外,也可以通過指定采樣比例 frac 來隨機選取數據。當 frac=0.5時,將隨機返回一般的數據。

sample2 = df.sample(frac=0.5)
sample2

為了獲得可重復的樣品,我們可以指定random_state參數。如果將整數值傳遞給random_state,則每次運行代碼時都將生成相同的采樣數據。

5. Where

where函數用于指定條件的數據替換。如果不指定條件,則默認替換值為 NaN。

df['new_col'].where(df['new_col'] > 0, 0)

where函數首先根據指定條件定位目標數據,然后替換為指定的新數據。上述代碼中,where(df['new_col']>0,0)指定'new_col'列中數值大于0的所有數據為被替換對象,并且被替換為0。

重要的一點是,pandas 和 numpy的where函數并不完全相同。我們可以得到相同的結果,但語法存在差異。Np.where還需要指定列對象。以下兩行返回相同的結果:

df['new_col'].where(df['new_col'] > 0, 0)
np.where(df['new_col'] > 0, df['new_col'], 0)

6. Isin

在處理數據幀時,我們經常使用過濾或選擇方法。Isin是一種先進的篩選方法。例如,我們可以根據選擇列表篩選數據。

years = ['2010','2014','2017']
df[df.year.isin(years)]

7. Loc 和 iloc

Loc 和 iloc 函數用于選擇行或者列。

  • loc:通過標簽選擇
  • iloc:通過位置選擇

loc用于按標簽選擇數據。列的標簽是列名。對于行標簽,如果我們不分配任何特定的索引,pandas默認創建整數索引。因此,行標簽是從0開始向上的整數。與iloc一起使用的行位置也是從0開始的整數。

下述代碼實現選擇前三行前兩列的數據(iloc方式):

df.iloc[:3,:2]

下述代碼實現選擇前三行前兩列的數據(loc方式):

df.loc[:2,['group','year']]

注:當使用loc時,包括索引的上界,而使用iloc則不包括索引的上界。

下述代碼實現選擇"1","3","5"行、"year","value_1"列的數據(loc方式):

df.loc[[1,3,5],['year','value_1']]

8. Pct_change

此函數用于計算一系列值的變化百分比。假設我們有一個包含[2,3,6]的序列。如果我們對這個序列應用pct_change,則返回的序列將是[NaN,0.5,1.0]。從第一個元素到第二個元素增加了50%,從第二個元素到第三個元素增加了100%。Pct_change函數用于比較元素時間序列中的變化百分比。

df.value_1.pct_change()

9. Rank

Rank函數實現對數據進行排序。假設我們有一個包含[1,7,5,3]的序列。分配給這些值的等級為[1,4,3,2]。

df['rank_1'] = df['value_1'].rank()
df

10. Melt

Melt用于將維數較大的 dataframe轉換為維數較少的 dataframe。一些dataframe列中包含連續的度量或變量。在某些情況下,將這些列表示為行可能更適合我們的任務。考慮以下情況:

我們有三個不同的城市,在不同的日子進行測量。我們決定將這些日子表示為列中的行。還將有一列顯示測量值。我們可以通過使用'melt'函數輕松實現:

df_wide.melt(id_vars=['city'])
df

變量名和列名通常默認給出。我們也可以使用melt函數的varname和valuename參數來指定新的列名。

11. Explode

假設數據集在一個觀測(行)中包含一個要素的多個條目,但您希望在單獨的行中分析它們。

我們想在不同的行上看到“c”的測量值,這很容易用explode來完成。

df1.explode('measurement').reset_index(drop=True)
df

12. Nunique

Nunique統計列或行上的唯一條目數。它在分類特征中非常有用,特別是在我們事先不知道類別數量的情況下。讓我們看看我們的初始數據:

df.year.nunique()
10
df.group.nunique()
3

我們可以直接將nunique函數應用于dataframe,并查看每列中唯一值的數量:

如果axis參數設置為1,nunique將返回每行中唯一值的數目。

13. Lookup

'lookup'可以用于根據行、列的標簽在dataframe中查找指定值。假設我們有以下數據:

我們要創建一個新列,該列顯示“person”列中每個人的得分:

df['Person_point'] = df.lookup(df.index, df['Person'])
df

14. Infer_objects

Pandas支持廣泛的數據類型,其中之一就是object。object包含文本或混合(數字和非數字)值。但是,如果有其他選項可用,則不建議使用對象數據類型。使用更具體的數據類型,某些操作執行得更快。例如,對于數值,我們更喜歡使用整數或浮點數據類型。

infer_objects嘗試為對象列推斷更好的數據類型。考慮以下數據:

df2.dtypes
A object
B object
C object
D object
dtype: object

通過上述代碼可知,現有所有的數據類型默認都是object。讓我們看看推斷的數據類型是什么:

df2.infer_objects().dtypes
A int64
B float64
C bool
D object
dtype: object

'infer_obejects'可能看起來微不足道,但在有很多列時作用巨大。

15. Memory_usage

Memory_usage()返回每列使用的內存量(以字節為單位)。考慮下面的數據,其中每一列有一百萬行。

df_large = pd.DataFrame({'A': np.random.randn(1000000),
'B': np.random.randint(100, size=1000000)})
df_large.shape
(1000000, 2)

每列占用的內存:

df_large.memory_usage()
Index 128
A 8000000
B 8000000
dtype: int64

整個 dataframe 占用的內存(轉換為以MB為單位):

df_large.memory_usage().sum() / (1024**2) #converting to megabytes
15.2589111328125

16. Describe

describe函數計算數字列的基本統計信息,這些列包括計數、平均值、標準偏差、最小值和最大值、中值、第一個和第三個四分位數。因此,它提供了dataframe的統計摘要。

17. Merge

Merge()根據共同列中的值組合dataframe。考慮以下兩個數據:

我們可以基于列中的共同值合并它們。設置合并條件的參數是“on”參數。

df1和df2是基于column_a列中的共同值進行合并的,merge函數的how參數允許以不同的方式組合dataframe,如:“inner”、“outer”、“left”、“right”等。

  • inner:僅在on參數指定的列中具有相同值的行(如果未指定其它方式,則默認為 inner 方式)
  • outer:全部列數據
  • left:左一dataframe的所有列數據
  • right:右一dataframe的所有列數據

18. Select_dtypes

Select_dtypes函數根據對數據類型設置的條件返回dataframe的子集。它允許使用include和exlude參數包含或排除某些數據類型。

df.select_dtypes(include='int64')

df.select_dtypes(exclude='int64')

19. Replace

顧名思義,它允許替換dataframe中的值。第一個參數是要替換的值,第二個參數是新值。

df.replace('A', 'A_1')

我們也可以在同一個字典中多次替換。

df.replace({'A':'A_1', 'B':'B_1'})

20. Applymap

Applymap用于將一個函數應用于dataframe中的所有元素。請注意,如果操作的矢量化版本可用,那么它應該優先于applymap。例如,如果我們想將每個元素乘以一個數字,我們不需要也不應該使用applymap函數。在這種情況下,簡單的矢量化操作(例如df*4)要快得多。

然而,在某些情況下,我們可能無法選擇矢量化操作。例如,我們可以使用pandas dataframes的style屬性更改dataframe的樣式。以下代碼將負值的顏色設置為紅色:

def color_negative_values(val):
color = 'red' if val < 0 else 'black'
return 'color: %s' % color

通過Applymap將上述代碼應用到dataframe:

df3.style.applymap(color_negative_values)

作者:Soner Y?ld?r?m

deephub翻譯組:Oliver Lee

總結

以上是生活随笔為你收集整理的frac函数_20个能够有效提高 Pandas数据分析效率的常用函数,附带解释和例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。