柚子快報(bào)邀請(qǐng)碼778899分享:Pandas學(xué)習(xí)筆記
柚子快報(bào)邀請(qǐng)碼778899分享:Pandas學(xué)習(xí)筆記
創(chuàng)建示例數(shù)據(jù)
data = { ‘index’: [‘A’, ‘B’, ‘C’], ‘value’: [1, 2, 3] } df = pd.DataFrame(data)
對(duì) DataFrame 進(jìn)行重置索引
reset_df = df.reset_index() print(reset_df)
level_0 index value 0 0 A 1 1 1 B 2 2 2 C 3
將當(dāng)前的索引列變?yōu)槠胀ǖ臄?shù)據(jù)列,并重新生成默認(rèn)整數(shù)索引
#### 刪除指定的列
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘Length’: [2, 3, 4], ‘Height’: [3, 4, 5], ‘Width’: [1, 1, 1] } df = pd.DataFrame(data)
使用 drop() 方法刪除指定的列
new_df = df.drop(columns=[‘Length’, ‘Height’]) print(new_df)
Width 0 1 1 1 2 1
### 篩選
#### 篩選行
篩選符合條件的行
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Name’: [‘Alice’, ‘Bob’, ‘Cathy’, ‘David’], ‘Age’: [25, 30, 22, 28], ‘Gender’: [‘F’, ‘M’, ‘F’, ‘M’] } df = pd.DataFrame(data)
過(guò)濾年齡大于25歲的行
filtered_df = df[df[‘Age’] > 25]
打印過(guò)濾后的DataFrame
print(filtered_df)
Name Age Gender
1 Bob 30 M 3 David 28 M
去除重復(fù)行
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Name’: [‘Alice’, ‘Bob’, ‘Cathy’, ‘Alice’, ‘Bob’], ‘Age’: [25, 30, 22, 25, 30] } df = pd.DataFrame(data)
刪除重復(fù)行
deduplicated_df = df.drop_duplicates()
打印刪除重復(fù)行后的DataFrame
print(deduplicated_df)
Name Age
0 Alice 25 1 Bob 30 2 Cathy 22
通過(guò)query篩選符合條件的行
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Width’: [3, 4, 2, 5], ‘Length’: [7, 6, 8, 5] } df = pd.DataFrame(data)
使用query來(lái)篩選行
filtered_df = df.query(‘Length > 7 and Width < 8’)
打印篩選后的DataFrame
print(filtered_df)
Width Length 2 2 8
除了上面的,還有:隨機(jī)取出某個(gè)比例的行、隨機(jī)取出指定數(shù)量的行,取出最大的n行,取出最小的n行,取出前n行,取出后n行
#### 篩選列
篩選多列
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘id’: [1, 2, 3, 4], ‘width’: [3, 4, 2, 5], ‘length’: [7, 6, 8, 5], ‘species’: [‘a(chǎn)’, ‘b’, ‘a(chǎn)’, ‘c’] } df = pd.DataFrame(data)
選擇特定列
selected_columns = df[[‘width’, ‘length’, ‘species’]]
打印選擇的列
print(selected_columns)
width length species 0 3 7 a 1 4 6 b 2 2 8 a 3 5 5 c
篩選單列
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘width’: [3, 4, 2, 5], ‘length’: [7, 6, 8, 5], ‘species’: [‘a(chǎn)’, ‘b’, ‘a(chǎn)’, ‘c’] } df = pd.DataFrame(data)
選擇特定列
selected_column = df[‘width’]
打印選擇的列
print(selected_column)
0 3 1 4 2 2 3 5 Name: width, dtype: int64
篩選符合正則表達(dá)式的列
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘a(chǎn)pple’: [3, 4, 2, 5], ‘banana’: [7, 6, 8, 5], ‘cherry’: [2, 8, 5, 7], ‘date’: [11, 12, 13, 14] } df = pd.DataFrame(data)
使用正則表達(dá)式選擇列名
selected_columns = df.filter(regex=‘^a’) # 選擇以字母 ‘a(chǎn)’ 開頭的列
打印選擇的列
print(selected_columns)
apple 0 3 1 4 2 2 3 5
#### 篩選行和列
iloc:通過(guò)索引數(shù)字定位的形式
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘A’: [1, 2, 3, 4], ‘B’: [5, 6, 7, 8], ‘C’: [9, 10, 11, 12], ‘D’: [13, 14, 15, 16], ‘E’: [17, 18, 19, 20] } df = pd.DataFrame(data)
使用iloc來(lái)選擇特定的行和列
selected_data = df.iloc[:, [1, 2, 4]]
打印選擇的行和列
print(selected_data)
B C E 0 5 9 17 1 6 10 18 2 7 11 19 3 8 12 20
loc:通過(guò)列名定位的形式
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘a(chǎn)’: [15, 8, 12, 20], ‘b’: [25, 18, 22, 30], ‘c’: [35, 28, 32, 40] } df = pd.DataFrame(data)
使用 loc 來(lái)選擇符合特定條件的行和指定的列
selected_data = df.loc[df[‘a(chǎn)’] > 10, [‘a(chǎn)’, ‘c’]]
打印選擇的行和列
print(selected_data)
a c
0 15 35 2 12 32 3 20 40
總結(jié):可以看到無(wú)論是iloc,還是loc都可以傳遞兩個(gè)參數(shù),第一個(gè)參數(shù)代表過(guò)濾行,第二個(gè)條件代表過(guò)濾列,如果只有一個(gè)參數(shù),那么只會(huì)過(guò)濾行,同時(shí)參數(shù)支持多種類型,比如
* **冒號(hào)**,代表整行,如df.iloc[:, [1, 2, 5]]
* **索引列表**,代表列號(hào),df.iloc[:, [1, 2, 5]]
* **索引1:索引2**,代表列范圍,如df.iloc[10:20]
* **列名1:列名2**,代表列范圍,如df.loc[:, ‘x2’:‘x4’]
* **比較運(yùn)算**,代表符合條件的行,如df.loc[df[‘a(chǎn)’] > 10, ['a’, ‘c’]]
iat、at類似,不過(guò)是篩選單個(gè)值
### 匯總數(shù)據(jù)
#### 獲得各個(gè)值的次數(shù)
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘w’: [‘A’, ‘B’, ‘A’, ‘C’, ‘A’, ‘A’, ‘B’] } df = pd.DataFrame(data)
使用 value_counts() 方法統(tǒng)計(jì) ‘w’ 列中各個(gè)取值的出現(xiàn)次數(shù)
value_counts_result = df[‘w’].value_counts() print(value_counts_result)
w A 4 B 2 C 1
#### 獲得行數(shù)
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, 3], ‘B’: [‘a(chǎn)’, ‘b’, ‘c’] } df = pd.DataFrame(data)
使用 len(df) 獲取 DataFrame 的行數(shù)
rows_count = len(df) print(rows_count)
3
#### 獲得行數(shù)和列數(shù)
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, 3], ‘B’: [‘a(chǎn)’, ‘b’, ‘c’] } df = pd.DataFrame(data)
使用 shape 屬性獲取 DataFrame 的行數(shù)和列數(shù)
shape = df.shape print(shape)
(3, 2)
#### 獲得唯一值的個(gè)數(shù)
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘w’: [‘A’, ‘B’, ‘A’, ‘C’, ‘A’, ‘A’, ‘B’] } df = pd.DataFrame(data)
使用 nunique() 方法獲取 ‘w’ 列的唯一值個(gè)數(shù)
unique_values_count = df[‘w’].nunique() print(unique_values_count)
3
#### 獲得每一列的統(tǒng)計(jì)信息
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, 3, 4, 5], ‘B’: [10, 20, 30, 40, 50] } df = pd.DataFrame(data)
使用 describe() 方法生成描述性統(tǒng)計(jì)信息
description = df.describe() print(description)
A B
count 5.000000 5.000000 mean 3.000000 30.000000 std 1.581139 15.811388 min 1.000000 10.000000 25% 2.000000 20.000000 50% 3.000000 30.000000 75% 4.000000 40.000000 max 5.000000 50.000000
#### 其他
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Name’: [‘Alice’, ‘Bob’, ‘Cathy’, ‘David’], ‘Age’: [25, 30, 22, 28], ‘Score’: [80, 75, 90, 85] } df = pd.DataFrame(data)
計(jì)算年齡的均值
average_age = df[‘Age’].mean()
計(jì)算分?jǐn)?shù)的總和
total_score = df[‘Score’].sum()
打印匯總結(jié)果
print(“Average Age:”, average_age) print(“Total Score:”, total_score)
Average Age: 26.25 Total Score: 330
出了上面的形式,還可以取出某一列數(shù)據(jù),求和、計(jì)算平均值、最大值、最小值、百分位數(shù)、標(biāo)準(zhǔn)差、中位數(shù)等
### 分組數(shù)據(jù)
#### 根據(jù)某一列來(lái)分組
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘col1’: [‘A’, ‘B’, ‘A’, ‘B’, ‘A’, ‘A’], ‘col2’: [1, 2, 2, 3, 3, 4], ‘col3’: [10, 20, 30, 40, 50, 60] } df = pd.DataFrame(data)
按 ‘col1’ 列進(jìn)行分組并計(jì)算平均值
grouped = df.groupby(by=‘col1’).mean() print(grouped)
col2 col3
col1 A 2.5 37.5 B 2.5 30.0
按指定的列進(jìn)行分組,然后計(jì)算每一列,每個(gè)分組
#### 根據(jù)某一個(gè)索引來(lái)分組
import pandas as pd
創(chuàng)建示例DataFrame(帶有多層索引)
arrays = [[‘A’, ‘A’, ‘B’, ‘B’], [1, 2, 1, 2]] index = pd.MultiIndex.from_arrays(arrays, names=(‘ind’, ‘sub_ind’)) df = pd.DataFrame({‘values’: [10, 20, 30, 40]}, index=index) print(df)
按照第一級(jí)索引 “ind” 進(jìn)行分組,并計(jì)算每組的總和
grouped = df.groupby(level=“ind”).sum()
打印分組計(jì)算的結(jié)果
print(grouped)
values
ind sub_ind A 1 10 2 20 B 1 30 2 40
values
ind A 30 B 70
按指定的行索引分組,然后計(jì)算每一列、每個(gè)分組
#### 下移/上移
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘value’: [10, 20, 30, 40, 50] } df = pd.DataFrame(data)
使用 shift(1) 方法將數(shù)據(jù)向下移動(dòng)一個(gè)位置
shifted_df = df.shift(1) print(shifted_df)
value 0 NaN 1 10.0 2 20.0 3 30.0 4 40.0
#### 秩
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [10, 20, 20, 30, 30, 30] } df = pd.DataFrame(data)
使用 rank(method=‘dense’) 方法計(jì)算 ‘A’ 列中各個(gè)元素的秩
ranked_values = df[‘A’].rank(method=‘dense’) print(ranked_values)
0 1.0 1 2.0 2 2.0 3 3.0 4 3.0 5 3.0 Name: A, dtype: float64
#### 累計(jì)值
比如累加和、累加最大值、最小值、累加乘積
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, 3, 4, 5] } df = pd.DataFrame(data)
使用 cumsum() 方法計(jì)算 ‘A’ 列中各個(gè)元素的累積和
cumulative_sum = df[‘A’].cumsum() print(cumulative_sum)
0 1 1 3 2 6 3 10 4 15 Name: A, dtype: int64
### 處理缺失值
#### 刪除缺失值
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, None, 4], ‘B’: [None, 5, 6, 7], ‘C’: [8, 9, 10, 11] } df = pd.DataFrame(data)
刪除包含缺失值的行
cleaned_df = df.dropna() print(cleaned_df)
A B C
1 2.0 5.0 9 3 4.0 7.0 11
#### 填充缺失值
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, None, 4], ‘B’: [None, 5, 6, 7], ‘C’: [8, 9, 10, 11] } df = pd.DataFrame(data)
用指定值填充缺失值
filled_df = df.fillna(value=0) print(filled_df)
A B C
0 1.0 0.0 8 1 2.0 5.0 9 2 0.0 6.0 10 3 4.0 7.0 11
### 構(gòu)建新列
#### 使用assign增加新的列
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘Length’: [2, 3, 4, 5], ‘Height’: [3, 4, 5, 6] } df = pd.DataFrame(data)
使用 assign() 方法計(jì)算面積并創(chuàng)建新的列
df_with_area = df.assign(Area=lambda x: x[‘Length’] * x[‘Height’]) print(df_with_area)
Length Height Area 0 2 3 6 1 3 4 12 2 4 5 20 3 5 6 30
#### 通過(guò)數(shù)據(jù)運(yùn)算增加單列
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘Length’: [2, 3, 4, 5], ‘Height’: [3, 4, 5, 6], ‘Depth’: [1, 2, 1, 3] } df = pd.DataFrame(data)
通過(guò)對(duì)現(xiàn)有列進(jìn)行運(yùn)算創(chuàng)建新列
df[‘Volume’] = df[‘Length’] * df[‘Height’] * df[‘Depth’] print(df)
Length Height Depth Volume 0 2 3 1 6 1 3 4 2 24 2 4 5 1 20 3 5 6 3 90
#### 使用qcut進(jìn)行分箱
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘col’: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] } df = pd.DataFrame(data)
使用 pd.qcut() 方法對(duì)數(shù)據(jù)進(jìn)行分箱
df[‘bin’] = pd.qcut(df[‘col’], 3, labels=False) print(df)
col bin 0 10 0 1 20 0 2 30 0 3 40 1 4 50 1 5 60 1 6 70 2 7 80 2 8 90 2 9 100 2
#### 每行的最大值
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, 3], ‘B’: [4, 5, 6], ‘C’: [7, 8, 9] } df = pd.DataFrame(data)
使用 max(axis=1) 方法計(jì)算每行的最大值
max_values = df.max(axis=1) print(max_values)
0 7 1 8 2 9 dtype: int64
#### 將值限制在某個(gè)范圍內(nèi)
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [15, 5, -8, 12, 20] } df = pd.DataFrame(data)
使用 clip(lower=-10, upper=10) 方法將值限制在 -10 和 10 之間
clipped_df = df.clip(lower=-10, upper=10) print(clipped_df)
A
0 10 1 5 2 -8 3 10 4 10
計(jì)算某列各個(gè)元素的絕對(duì)值
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, -2, 3, -4, 5] } df = pd.DataFrame(data)
使用 abs() 方法計(jì)算 ‘A’ 列中各個(gè)元素的絕對(duì)值
absolute_values = df[‘A’].abs() print(absolute_values)
0 1 1 2 2 3 3 4 4 5 Name: A, dtype: int64
### 合并數(shù)據(jù)集
#### 標(biāo)準(zhǔn)連接
包括和數(shù)據(jù)庫(kù)類似的:左連接、右連接、內(nèi)連接、外連接,這里以外連接為例
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data_a = { ‘x1’: [‘A’, ‘B’, ‘C’], ‘value_a’: [1, 2, 3] } data_b = { ‘x1’: [‘A’, ‘B’, ‘D’], ‘value_b’: [4, 5, 6] } adf = pd.DataFrame(data_a) bdf = pd.DataFrame(data_b)
使用 pd.merge() 方法進(jìn)行外連接
merged_df = pd.merge(adf, bdf, how=‘outer’, on=‘x1’) print(merged_df)
x1 value_a value_b 0 A 1.0 4.0 1 B 2.0 5.0 2 C 3.0 NaN 3 D NaN 6.0
#### 過(guò)濾連接
從a中找到那些在b中有配對(duì)的行
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data_a = { ‘x1’: [‘A’, ‘B’, ‘C’, ‘D’], ‘value’: [1, 2, 3, 4] } data_b = { ‘x1’: [‘A’, ‘C’], ‘value’: [5, 6] } adf = pd.DataFrame(data_a) bdf = pd.DataFrame(data_b)
使用 isin() 方法選擇滿足條件的行
selected_rows = adf[adf[‘x1’].isin(bdf[‘x1’])] print(selected_rows)
x1 value 0 A 1 2 C 3
從a從找到那些在b中沒(méi)有配對(duì)的行
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data_a = { ‘x1’: [‘A’, ‘B’, ‘C’, ‘D’], ‘value’: [1, 2, 3, 4] } data_b = { ‘x1’: [‘A’, ‘C’], ‘value’: [5, 6] } adf = pd.DataFrame(data_a) bdf = pd.DataFrame(data_b)
使用 isin() 方法進(jìn)行反向條件選擇
selected_rows = adf[~adf[‘x1’].isin(bdf[‘x1’])] print(selected_rows)
**自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。**
**深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!**
**因此收集整理了一份《2024年P(guān)ython開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。**






**既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識(shí)點(diǎn),真正體系化!**
**由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新**
**如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲取?。。。▊渥ython)**
],
'value': [5, 6]
}
adf = pd.DataFrame(data_a)
bdf = pd.DataFrame(data_b)
# 使用 isin() 方法進(jìn)行反向條件選擇
selected_rows = adf[~adf['x1'].isin(bdf['x1'])]
print(selected_rows)
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年P(guān)ython開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
[外鏈圖片轉(zhuǎn)存中…(img-XlOilT8m-1712488062685)]
[外鏈圖片轉(zhuǎn)存中…(img-h94juwWq-1712488062686)]
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新
如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲取?。。。▊渥ython)
柚子快報(bào)邀請(qǐng)碼778899分享:Pandas學(xué)習(xí)筆記
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。