柚子快報邀請碼778899分享:Pandas學習筆記(1)
柚子快報邀請碼778899分享:Pandas學習筆記(1)
melted_df = df.melt(id_vars=‘Name’, value_vars=[‘Math’, ‘Physics’, ‘Chemistry’], var_name=‘Subject’, value_name=‘Score’)
打印轉換后的長格式數(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
長格式:典型的包括3列,每一行就代表某一行某一列對應的某個值,從而也可以將一張表的信息全部裝下
#### 長格式轉換為寬格式
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ù)從長格式轉換為寬格式
pivot_df = df.pivot(index=‘Name’, columns=‘Subject’, values=‘Score’).reset_index()
打印轉換后的寬格式數(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
寬格式:將一個東西的所有信息都放在一行上,和常規(guī)數(shù)據(jù)庫的表類似
#### 垂直拼接
import pandas as pd
創(chuàng)建兩個示例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ù)在垂直方向上合并這兩個DataFrame
result = pd.concat([df1, df2])
打印合并結果
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)建兩個示例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ù)在水平方向上合并這兩個DataFrame
result = pd.concat([df1, df2], axis=1)
打印合并結果
print(result)
A B C D
0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2
#### 根據(jù)某列進行排序
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列對 DataFrame 進行排序
sorted_df = df.sort_values(‘mpg’) print(sorted_df)
brand mpg
3 Audi 23 0 Ford 25 2 BMW 27 1 Toyota 30
#### 根據(jù)索引進行排序
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘col1’: [3, 2, 1], ‘col2’: [‘A’, ‘B’, ‘C’] } df = pd.DataFrame(data)
對 DataFrame 根據(jù)索引進行排序
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)
對 DataFrame 進行重置索引
reset_df = df.reset_index() print(reset_df)
level_0 index value 0 0 A 1 1 1 B 2 2 2 C 3
將當前的索引列變?yōu)槠胀ǖ臄?shù)據(jù)列,并重新生成默認整數(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)
過濾年齡大于25歲的行
filtered_df = df[df[‘Age’] > 25]
打印過濾后的DataFrame
print(filtered_df)
Name Age Gender
1 Bob 30 M 3 David 28 M
去除重復行
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Name’: [‘Alice’, ‘Bob’, ‘Cathy’, ‘Alice’, ‘Bob’], ‘Age’: [25, 30, 22, 25, 30] } df = pd.DataFrame(data)
刪除重復行
deduplicated_df = df.drop_duplicates()
打印刪除重復行后的DataFrame
print(deduplicated_df)
Name Age
0 Alice 25 1 Bob 30 2 Cathy 22
通過query篩選符合條件的行
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘Width’: [3, 4, 2, 5], ‘Length’: [7, 6, 8, 5] } df = pd.DataFrame(data)
使用query來篩選行
filtered_df = df.query(‘Length > 7 and Width < 8’)
打印篩選后的DataFrame
print(filtered_df)
Width Length 2 2 8
除了上面的,還有:隨機取出某個比例的行、隨機取出指定數(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’, ‘b’, ‘a’, ‘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’, ‘b’, ‘a’, ‘c’] } df = pd.DataFrame(data)
選擇特定列
selected_column = df[‘width’]
打印選擇的列
print(selected_column)
0 3 1 4 2 2 3 5 Name: width, dtype: int64
篩選符合正則表達式的列
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘apple’: [3, 4, 2, 5], ‘banana’: [7, 6, 8, 5], ‘cherry’: [2, 8, 5, 7], ‘date’: [11, 12, 13, 14] } df = pd.DataFrame(data)
使用正則表達式選擇列名
selected_columns = df.filter(regex=‘^a’) # 選擇以字母 ‘a’ 開頭的列
打印選擇的列
print(selected_columns)
apple 0 3 1 4 2 2 3 5
#### 篩選行和列
iloc:通過索引數(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來選擇特定的行和列
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:通過列名定位的形式
import pandas as pd
創(chuàng)建示例DataFrame
data = { ‘a’: [15, 8, 12, 20], ‘b’: [25, 18, 22, 30], ‘c’: [35, 28, 32, 40] } df = pd.DataFrame(data)
使用 loc 來選擇符合特定條件的行和指定的列
selected_data = df.loc[df[‘a’] > 10, [‘a’, ‘c’]]
打印選擇的行和列
print(selected_data)
a c
0 15 35 2 12 32 3 20 40
總結:可以看到無論是iloc,還是loc都可以傳遞兩個參數(shù),第一個參數(shù)代表過濾行,第二個條件代表過濾列,如果只有一個參數(shù),那么只會過濾行,同時參數(shù)支持多種類型,比如
* **冒號**,代表整行,如df.iloc[:, [1, 2, 5]]
* **索引列表**,代表列號,df.iloc[:, [1, 2, 5]]
* **索引1:索引2**,代表列范圍,如df.iloc[10:20]
* **列名1:列名2**,代表列范圍,如df.loc[:, ‘x2’:‘x4’]
* **比較運算**,代表符合條件的行,如df.loc[df[‘a’] > 10, ['a’, ‘c’]]
iat、at類似,不過是篩選單個值
### 匯總數(shù)據(jù)
#### 獲得各個值的次數(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)計 ‘w’ 列中各個取值的出現(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’, ‘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’, ‘b’, ‘c’] } df = pd.DataFrame(data)
使用 shape 屬性獲取 DataFrame 的行數(shù)和列數(shù)
shape = df.shape print(shape)
(3, 2)
#### 獲得唯一值的個數(shù)
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘w’: [‘A’, ‘B’, ‘A’, ‘C’, ‘A’, ‘A’, ‘B’] } df = pd.DataFrame(data)
使用 nunique() 方法獲取 ‘w’ 列的唯一值個數(shù)
unique_values_count = df[‘w’].nunique() print(unique_values_count)
3
#### 獲得每一列的統(tǒng)計信息
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)計信息
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)
計算年齡的均值
average_age = df[‘Age’].mean()
計算分數(shù)的總和
total_score = df[‘Score’].sum()
打印匯總結果
print(“Average Age:”, average_age) print(“Total Score:”, total_score)
Average Age: 26.25 Total Score: 330
出了上面的形式,還可以取出某一列數(shù)據(jù),求和、計算平均值、最大值、最小值、百分位數(shù)、標準差、中位數(shù)等
### 分組數(shù)據(jù)
#### 根據(jù)某一列來分組
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’ 列進行分組并計算平均值
grouped = df.groupby(by=‘col1’).mean() print(grouped)
col2 col3
col1 A 2.5 37.5 B 2.5 30.0
按指定的列進行分組,然后計算每一列,每個分組
#### 根據(jù)某一個索引來分組
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)
按照第一級索引 “ind” 進行分組,并計算每組的總和
grouped = df.groupby(level=“ind”).sum()
打印分組計算的結果
print(grouped)
values
ind sub_ind A 1 10 2 20 B 1 30 2 40
values
ind A 30 B 70
按指定的行索引分組,然后計算每一列、每個分組
#### 下移/上移
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘value’: [10, 20, 30, 40, 50] } df = pd.DataFrame(data)
使用 shift(1) 方法將數(shù)據(jù)向下移動一個位置
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’) 方法計算 ‘A’ 列中各個元素的秩
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
#### 累計值
比如累加和、累加最大值、最小值、累加乘積
import pandas as pd
創(chuàng)建示例數(shù)據(jù)
data = { ‘A’: [1, 2, 3, 4, 5] } df = pd.DataFrame(data)
使用 cumsum() 方法計算 ‘A’ 列中各個元素的累積和
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
### 構建新列
#### 使用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() 方法計算面積并創(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
#### 通過數(shù)據(jù)運算增加單列
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)
通過對現(xià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進行分箱
**自我介紹一下,小編13年上海交大畢業(yè),曾經在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。**
**深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!**
**因此收集整理了一份《2024年Python開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。**






**既有適合小白學習的零基礎資料,也有適合3年以上經驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!**
**由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新**
**如果你覺得這些內容對你有幫助,可以掃碼獲?。。。。▊渥ython)**
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進行分箱
自我介紹一下,小編13年上海交大畢業(yè),曾經在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術停滯不前!
因此收集整理了一份《2024年Python開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
[外鏈圖片轉存中…(img-ZkvatwXR-1712883427995)]
[外鏈圖片轉存中…(img-KkB8fPHB-1712883427996)]
[外鏈圖片轉存中…(img-gUpGNEWd-1712883427997)]
[外鏈圖片轉存中…(img-X4dOb6e1-1712883427997)]
既有適合小白學習的零基礎資料,也有適合3年以上經驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內容對你有幫助,可以掃碼獲取?。。。▊渥ython)
柚子快報邀請碼778899分享:Pandas學習筆記(1)
參考閱讀
本文內容根據(jù)網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。