柚子快報(bào)激活碼778899分享:Pandas學(xué)習(xí)筆記(1)
柚子快報(bào)激活碼778899分享:Pandas學(xué)習(xí)筆記(1)
melted_df = df.melt(id_vars=‘Name’, value_vars=[‘Math’, ‘Physics’, ‘Chemistry’], var_name=‘Subject’, value_name=‘Score’)
打印轉(zhuǎn)換后的長(zhǎng)格式數(shù)據(jù)
print(melted_df)
Name Subject Score
0 Alice Math 90 1 Bob Math 85 2 Cathy Math 95 3 Alice Physics 88 4 Bob Physics 82 5 Cathy Physics 90 6 Alice Chemistry 87 7 Bob Chemistry 80 8 Cathy Chemistry 92
長(zhǎng)格式:典型的包括3列,每一行就代表某一行某一列對(duì)應(yīng)的某個(gè)值,從而也可以將一張表的信息全部裝下
#### 長(zhǎng)格式轉(zhuǎn)換為寬格式
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Name’: [‘Alice’, ‘Bob’, ‘Cathy’, ‘Alice’, ‘Bob’, ‘Cathy’, ‘Alice’, ‘Bob’, ‘Cathy’], ‘Subject’: [‘Math’, ‘Math’, ‘Math’, ‘Physics’, ‘Physics’, ‘Physics’, ‘Chemistry’, ‘Chemistry’, ‘Chemistry’], ‘Score’: [90, 85, 95, 88, 82, 90, 87, 80, 92] } df = pd.DataFrame(data)
使用pivot函數(shù)將數(shù)據(jù)從長(zhǎng)格式轉(zhuǎn)換為寬格式
pivot_df = df.pivot(index=‘Name’, columns=‘Subject’, values=‘Score’).reset_index()
打印轉(zhuǎn)換后的寬格式數(shù)據(jù)
print(pivot_df)
Subject Name Chemistry Math Physics 0 Alice 87 90 88 1 Bob 80 85 82 2 Cathy 92 95 90
寬格式:將一個(gè)東西的所有信息都放在一行上,和常規(guī)數(shù)據(jù)庫(kù)的表類似
#### 垂直拼接
import pandas as pd
創(chuàng)建兩個(gè)示例DataFrame
df1 = pd.DataFrame({‘A’: [‘A0’, ‘A1’, ‘A2’], ‘B’: [‘B0’, ‘B1’, ‘B2’], ‘C’: [‘C0’, ‘C1’, ‘C2’]})
df2 = pd.DataFrame({‘A’: [‘A3’, ‘A4’, ‘A5’], ‘B’: [‘B3’, ‘B4’, ‘B5’], ‘C’: [‘C3’, ‘C4’, ‘C5’]})
使用concat函數(shù)在垂直方向上合并這兩個(gè)DataFrame
result = pd.concat([df1, df2])
打印合并結(jié)果
print(result)
A B C
0 A0 B0 C0 1 A1 B1 C1 2 A2 B2 C2 0 A3 B3 C3 1 A4 B4 C4 2 A5 B5 C5
#### 水平拼接
import pandas as pd
創(chuàng)建兩個(gè)示例DataFrame
df1 = pd.DataFrame({‘A’: [‘A0’, ‘A1’, ‘A2’], ‘B’: [‘B0’, ‘B1’, ‘B2’]})
df2 = pd.DataFrame({‘C’: [‘C0’, ‘C1’, ‘C2’], ‘D’: [‘D0’, ‘D1’, ‘D2’]})
使用concat函數(shù)在水平方向上合并這兩個(gè)DataFrame
result = pd.concat([df1, df2], axis=1)
打印合并結(jié)果
print(result)
A B C D
0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2
#### 根據(jù)某列進(jìn)行排序
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘brand’: [‘Ford’, ‘Toyota’, ‘BMW’, ‘Audi’], ‘mpg’: [25, 30, 27, 23] } df = pd.DataFrame(data)
使用 sort_values() 方法按照mpg列對(duì) DataFrame 進(jìn)行排序
sorted_df = df.sort_values(‘mpg’) print(sorted_df)
brand mpg
3 Audi 23 0 Ford 25 2 BMW 27 1 Toyota 30
#### 根據(jù)索引進(jìn)行排序
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘col1’: [3, 2, 1], ‘col2’: [‘A’, ‘B’, ‘C’] } df = pd.DataFrame(data)
對(duì) DataFrame 根據(jù)索引進(jìn)行排序
sorted_df = df.sort_index() print(sorted_df)
col1 col2 0 3 A 1 2 B 2 1 C
#### 重命名列名
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘x’: [1, 2, 3], ‘y’: [4, 5, 6], ‘z’: [7, 8, 9] } df = pd.DataFrame(data)
使用 rename() 方法重命名列
df_renamed = df.rename(columns={‘y’: ‘year’})
print(df_renamed)
x year z 0 1 4 7 1 2 5 8 2 3 6 9
#### 重置索引
import pandas as pd
創(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)行分箱
**自我介紹一下,小編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)**
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)行分箱
自我介紹一下,小編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-iCAzaHvx-1712488027501)]
[外鏈圖片轉(zhuǎn)存中…(img-pHuBzMf2-1712488027502)]
既有適合小白學(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)激活碼778899分享:Pandas學(xué)習(xí)筆記(1)
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。