柚子快報激活碼778899分享:pandas增刪改查
柚子快報激活碼778899分享:pandas增刪改查
文章目錄
1.增加? ? ? ?
1.增加數(shù)據(jù)
new_row={'列名':數(shù)據(jù)}
df._append(new_row)
import pandas as pd
# 創(chuàng)建一個空的數(shù)據(jù)庫
df=pd.DataFrame()
# 增加一行數(shù)據(jù)
new_row = {'A':1,'B':2,'C':3}
df = df._append(new_row, ignore_index=True)
print(df)
? ? ? ? ?結(jié)果:
????????????????????????????A ?B ?C ????????????????????????0 ?1 ?2 ?3
2.新增一列數(shù)據(jù)
????????df['新增列名'] =[數(shù)據(jù)]
mport pandas as pd
# 創(chuàng)建一個空的數(shù)據(jù)庫
df=pd.DataFrame()
# 增加一行數(shù)據(jù)
new_row = {'A':1,'B':2,'C':3}
df = df._append(new_row, ignore_index=True)
#print(df)
df['D'] =[4]
print(df)
# 結(jié)果
# A B C D
# 0 1 2 3 4
3.根據(jù)條件來增加數(shù)據(jù)
? ? ? ? ? ? ? ? query('條件')
import pandas as pd
# 創(chuàng)建一個空的數(shù)據(jù)庫
df=pd.DataFrame()
# 增加一行數(shù)據(jù)
new_row = {'A':1,'B':2,'C':3}
df = df._append(new_row, ignore_index=True)
print(df)
# A B C
# 0 1 2 3
df = df.query('B >4')
print(df)
# Empty DataFrame
# Columns: [A, B, C]
# Index: []
df['D'] =[4]
print(df)
# A B C D
# 0 NaN NaN NaN 4
4.根據(jù)索引來增加數(shù)據(jù)
????????1.加了fd.loc['行名'],就是添加行名的數(shù)據(jù)
????????new_row = {'列名':數(shù)據(jù)}
????????fd.loc['行名'] = new_row
????????2.fd.loc[n],n是對第幾行進(jìn)行操作,
????????fd.loc[n] = new_row
????????3.fd['列名']沒有加loc,就是添加列名的數(shù)據(jù)
????????d['列名']=[數(shù)據(jù)]
# import pandas as pd
# # 創(chuàng)建一個空的數(shù)據(jù)庫
# df=pd.DataFrame()
# # 增加一行數(shù)據(jù)
# new_row = {'A':1,'B':2,'C':3}
# df = df._append(new_row, ignore_index=True)
# print(df)
# # A B C
# # 0 1 2 3
# df = df.query('B >4')
# print(df)
# # Empty DataFrame
# # Columns: [A, B, C]
# # Index: []
# df['D'] =[4]
# print(df)
# # A B C D
# # 0 NaN NaN NaN 4
import pandas as pd
# 創(chuàng)建一個數(shù)據(jù)框
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print(df)
# A B
# 0 1 4
# 1 2 5
# 2 3 6
# 在索引為0的位置添加一行
# new_row = {'A': 10, 'B': 20}
# df.loc[0] = new_row
# print(df)
# # A B
# # 0 10 20
# # 1 2 5
# # 2 3 6
# 前面注釋,不然一二行都變成10,20
# 說明里面是的幾個【n】,就注釋第n行
# 在索引為1的位置添加一行
new_row = {'A': 10, 'B': 20}
df.loc[1] = new_row
print(df)
# A B
# 0 1 4
# 1 10 20
# 2 3 6
# 在索引為'new_index'的位置添加一行
# 加了loc['行名'],就是添加行名的數(shù)據(jù)
# 沒有加就是添加列名的數(shù)據(jù)
new_row = {'A': 100, 'B': 200}
df.loc['new_index'] = new_row
print(df)
# A B
# 0 1 4
# 1 10 20
# 2 3 6
# new_index 100 200
# 在'C'列末尾添加一列
new_col = [1, 2, 3, 4] # 數(shù)據(jù)的長度應(yīng)與索引的長度相匹配
df['C'] = new_col
print(df)
# A B C
# 0 1 4 1
# 1 10 20 2
# 2 3 6 3
# new_index 100 200 4
?2.刪除
1.刪除數(shù)據(jù)整個數(shù)據(jù)框
????????# 使用del關(guān)鍵字刪除整個數(shù)據(jù)框
????????del df
????????# 使用drop()方法刪除整個數(shù)據(jù)框
????????df.drop(df.index, inplace=True)
2.刪除指定的數(shù)據(jù)
movie.drop(movie[movie['指定的列'] == '指定值'].index,axis=1)
????????# 刪除指定的行(索引為0和1)
????????df.drop([0, 1], inplace=True)
???????? # 刪除指定的列('A'和'B'列)
???????? df.drop(['A', 'B'], axis=1, inplace=True)
?3.刪除有條件的數(shù)據(jù)
????# 使用query方法刪除滿足特定條件的行
????df = df.query('B != "apple"') # 刪除'B'列值為'apple'的行
import pandas as pd
# 創(chuàng)建一個示例數(shù)據(jù)框
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
'B': ['apple', 'banana', 'cherry', 'apple', 'orange'],
'C': [True, False, True, True, False]})
# 使用query方法刪除滿足特定條件的行
df = df.query('B != "apple"') # 刪除'B'列值為'apple'的行
print(df)
# A B C
# 1 2 banana False
# 2 3 cherry True
# 4 5 orange False
????????# 使用 query 方法篩選滿足條件的行,并通過 loc 方法選擇特定的列
????????result = df.query('條件').loc[ : ,? ['列名'] ]
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B 和 C
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]})
# 使用 query 方法篩選滿足條件的行,并通過 loc 方法選擇特定的列
result = df.query('A > 2').loc[:, ['B', 'C']]
print(result)
# B C
# 2 30 300
# 3 40 400
# 4 50 500
3.修改
1.修改指定的數(shù)據(jù)
df.loc[行數(shù),‘列名’] = 數(shù)據(jù)
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B 和 C
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]})
# 修改指定位置的數(shù)據(jù)
df.loc[2, 'B'] = 35
print(df)
# A B C
# 0 1 10 100
# 1 2 20 200
# 2 3 35 300
# 3 4 40 400
# 4 5 50 500
2.修改有條件的數(shù)據(jù)
df.loc[df['列名']>(行的條件),‘修改的列’] = 列的數(shù)據(jù)
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B 和 C
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]})
# 根據(jù)條件修改數(shù)據(jù)
df.loc[df['A'] > 2, 'C'] = 999
print(df)
# A B C
# 0 1 10 100
# 1 2 20 200
# 2 3 30 999
# 3 4 40 999
# 4 5 50 999
4.查詢
1.指定查詢
quer(‘條件’)[ [查詢的字段] ]
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B 和 C
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]})
# 查詢指定列
df_query = df.query('A > 2')[['A', 'C']]
print(df_query)
# A C
# 2 3 300
# 3 4 400
# 4 5 500
2.條件查詢? ? ? ? ? ?
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B 和 C
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]})
# 條件查詢
df_filtered = df[(df['A'] > 2) & (df['C'] < 400)]
print(df_filtered)
# A B C
# 2 3 30 300
?3.分組和聚合查詢
df.groupby('列名').聚會函數(shù)
df = pd.DataFrame({'A': [1, 1, 2, 2, 3],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]})
# 按列 A 進(jìn)行分組,并計算每個分組的均值
grouped = df.groupby('A').mean()
# 輸出結(jié)果
print(grouped)
# B C
# A
# 1 15.0 150.0
# 2 35.0 350.0
# 3 50.0 500.0
4.合表查詢
????????????????1.按方向合并 ? ? ? ? ? ? ? ? ? ? ? ? pd.concat((a,b), axis=)
# 假設(shè)有兩個數(shù)據(jù)框 a 和 b
a = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6]})
b = pd.DataFrame({'C': [7, 8, 9],
'D': [10, 11, 12]})
# 按行方向合并(縱向合并)
concatenated = pd.concat((a, b), axis=0)
# 輸出結(jié)果
print(concatenated)
# A B C D
# 0 1.0 4.0 NaN NaN
# 1 2.0 5.0 NaN NaN
# 2 3.0 6.0 NaN NaN
# 0 NaN NaN 7.0 10.0
# 1 NaN NaN 8.0 11.0
# 2 NaN NaN 9.0 12.0
? ? ? ? ? ? ? ? 2.按索引合并 ? ? ? ? ? ? ? ? ? ? ? ? pd.merge(left,right,how='inner', on=[索引]) ?
# 假設(shè)有兩個數(shù)據(jù)框 df1 和 df2,包含列 key、A 和 B
df1 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'qux'],
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8]})
df2 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'qux'],
'C': [9, 10, 11, 12],
'D': [13, 14, 15, 16]})
# 合并兩個數(shù)據(jù)框,根據(jù) key 列進(jìn)行合并
merged = pd.merge(df1, df2, on='key')
# 輸出結(jié)果
print(merged)
# key A B C D
# 0 foo 1 5 9 13
# 1 bar 2 6 10 14
# 2 baz 3 7 11 15
# 3 qux 4 8 12 16
5.交叉表查詢
pd.crosstab() 函數(shù)用于創(chuàng)建交叉表(cross-tabulation),也稱為列聯(lián)表。它可以統(tǒng)計兩個或多個變量之間的頻數(shù)或頻率,并以表格形式展示。
函數(shù)的語法如下:
pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None) 其中:
index 是要在行方向上進(jìn)行分組的變量; columns 是要在列方向上進(jìn)行分組的變量; values 是可選的,用于指定要聚合的數(shù)據(jù)列; rownames 和 colnames 是可選的,用于指定行和列的名稱; aggfunc 是可選的,用于定義對聚合值進(jìn)行計算的函數(shù),默認(rèn)為計數(shù)。
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B、C 和 D
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
# 創(chuàng)建透視表,按 A 和 B 列分組,并計算 C 和 D 列的均值
pivot_table = df.pivot_table(values=['C', 'D'], index='A', columns='B', aggfunc=np.mean)
# 輸出結(jié)果
print(pivot_table)
# C D
# B one three two one three two
# A
# bar 1.821440 -0.407843 0.114514 0.337398 -1.026214 -0.418785
# foo 0.677367 0.889548 -0.128189 -0.747733 -1.760644 -0.286292
6.透視表查詢
df.pivot_table(values, index, columns, aggfunc='mean', fill_value=None) 其中:
values 是要進(jìn)行聚合的字段或字段列表; index 是用作新表格的索引的字段; columns 是用作新表格列的字段; aggfunc 是指定聚合函數(shù)的參數(shù),默認(rèn)為 'mean'; fill_value 是可選的,用于指定替換缺失值的值。 ?
# 假設(shè)有一個數(shù)據(jù)框 df,包含列 A、B 和 C
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8)})
# 創(chuàng)建交叉表,按 A 和 B 列進(jìn)行分組,并計算 C 列的頻次
cross_table = pd.crosstab(index=df['A'], columns=df['B'], values=df['C'], aggfunc='count')
# 輸出結(jié)果
print(cross_table)
# B one three two
# A
# bar 1 1 1
# foo 2 1 2
1.交叉表和透視表的差別
交叉表(crosstab)和透視表(pivot table)是在 Pandas 中用于數(shù)據(jù)分析和匯總的兩種常見操作。它們之間有一些差別,主要體現(xiàn)在以下幾個方面:
數(shù)據(jù)結(jié)構(gòu):交叉表是一個用于計算頻率或統(tǒng)計指標(biāo)的特殊數(shù)據(jù)表格,其中行和列分別表示不同的分類變量,并顯示它們之間的交叉計數(shù)。透視表是根據(jù)一個或多個列中的值對數(shù)據(jù)進(jìn)行聚合,并將它們重塑為新的數(shù)據(jù)表格,其中行和列表示不同的指標(biāo)變量。 聚合方式:交叉表主要用于計算分類變量之間的頻率或交叉計數(shù)。它默認(rèn)使用計數(shù)作為聚合函數(shù),但也可以使用其他聚合函數(shù),如求和、均值等。透視表則是根據(jù)需要選擇不同的聚合函數(shù),可以使用各種聚合函數(shù)進(jìn)行數(shù)據(jù)聚合,如求和、均值、最大值、最小值等。 靈活性:透視表在對數(shù)據(jù)進(jìn)行聚合時更加靈活,可以根據(jù)需求自定義聚合函數(shù)、添加過濾條件、設(shè)置多級索引等。而交叉表相對簡單,主要用于計算頻率或統(tǒng)計指標(biāo),對數(shù)據(jù)的靈活處理能力較弱。
下面是交叉表和透視表的示例代碼:
交叉表示例:
pd.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None)
# 創(chuàng)建示例數(shù)據(jù)
data = {'Gender': ['Male', 'Female', 'Male', 'Female', 'Male'],
'Age': [20, 25, 30, 35, 40],
'Smoker': ['Yes', 'No', 'No', 'No', 'Yes']}
df = pd.DataFrame(data)
# 計算交叉表
cross_tab = pd.crosstab(df['Gender'], df['Smoker'])
# 輸出結(jié)果
print('-'*28)
print(cross_tab)
# Smoker No Yes
# Gender
# Female 2 0
# Male 1 2
透視表示例:
df.pivot_table(values, index, columns, aggfunc='mean', fill_value=None)
# 創(chuàng)建示例數(shù)據(jù)
data = {'Gender': ['Male', 'Female', 'Male', 'Female', 'Male'],
'Age': [20, 25, 30, 35, 40],
'Smoker': ['Yes', 'No', 'No', 'No', 'Yes']}
df = pd.DataFrame(data)
# 計算透視表
pivot_table = df.pivot_table(index='Gender', columns='Smoker', values='Age', aggfunc='mean')
# 輸出結(jié)果
print('_'*34)
print(pivot_table)
# Smoker No Yes
# Gender
# Female 30.0 NaN
# Male 30.0 30.0
在上面的示例中,交叉表計算了性別和吸煙情況之間的頻率統(tǒng)計,而透視表根據(jù)性別和吸煙情況對年齡進(jìn)行了平均值的匯總。
希望這個解釋有助于理解交叉表和透視表的差異。如果還有其他問題,請隨時提問!
柚子快報激活碼778899分享:pandas增刪改查
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。