網(wǎng)站備案?jìng)涞氖怯蛎€是空間企業(yè)培訓(xùn)有哪些方面
在 Pandas 中,如果需要?jiǎng)h除全部為 0 的行或列,可以通過 .all()
方法來判斷行或列是否所有元素都為 0,然后刪除這些行或列。
代碼示例
示例數(shù)據(jù):
import pandas as pd# 示例數(shù)據(jù)
data = {'A': [0, 2, 0, 4],'B': [0, 0, 0, 0],'C': [0, 10, 11, 12]
}
df = pd.DataFrame(data)print("原始數(shù)據(jù):")
print(df)
輸出:
A B C
0 0 0 0
1 2 0 10
2 0 0 11
3 4 0 12
1. 刪除全部為 0 的行
使用 .all(axis=1)
判斷行是否所有值都為 0,然后通過布爾索引刪除這些行。
# 刪除全為 0 的行
df_cleaned = df.loc[~(df == 0).all(axis=1)]print("\n刪除全為 0 的行:")
print(df_cleaned)
輸出:
刪除全為 0 的行:A B C
1 2 0 10
2 0 0 11
3 4 0 12
2. 刪除全部為 0 的列
使用 .all(axis=0)
判斷列是否所有值都為 0,然后通過布爾索引刪除這些列。
# 刪除全為 0 的列
df_cleaned = df.loc[:, ~(df == 0).all(axis=0)]print("\n刪除全為 0 的列:")
print(df_cleaned)
輸出:
刪除全為 0 的列:A C
0 0 0
1 2 10
2 0 11
3 4 12
3. 同時(shí)刪除全部為 0 的行和列
可以結(jié)合以上兩個(gè)方法,先刪除全部為 0 的行,再刪除全部為 0 的列。
# 刪除全為 0 的行
df = df.loc[~(df == 0).all(axis=1)]# 刪除全為 0 的列
df_cleaned = df.loc[:, ~(df == 0).all(axis=0)]print("\n刪除全為 0 的行和列:")
print(df_cleaned)
輸出:
刪除全為 0 的行和列:A C
1 2 10
2 0 11
3 4 12
參數(shù)解釋
(df == 0).all(axis=1)
:axis=1
表示按行判斷,檢查每一行是否全為0
。- 返回一個(gè)布爾數(shù)組,用于判斷哪些行滿足條件。
(df == 0).all(axis=0)
:axis=0
表示按列判斷,檢查每一列是否全為0
。- 返回一個(gè)布爾數(shù)組,用于判斷哪些列滿足條件。
擴(kuò)展:原地刪除(inplace=True
)
如果希望直接修改原 DataFrame
而不返回新的對(duì)象,可以結(jié)合 inplace=True
選項(xiàng)。
示例:
# 刪除全為 0 的行
df.drop(index=df[(df == 0).all(axis=1)].index, inplace=True)# 刪除全為 0 的列
df.drop(columns=df.columns[(df == 0).all(axis=0)], inplace=True)print("\n原地刪除全為 0 的行和列:")
print(df)
總結(jié)
操作 | 示例代碼 |
---|---|
刪除全為 0 的行 | df.loc[~(df == 0).all(axis=1)] |
刪除全為 0 的列 | df.loc[:, ~(df == 0).all(axis=0)] |
同時(shí)刪除全為 0 的行和列 | 結(jié)合上述兩條代碼 |
打印刪除了哪些行和列
要打印出被刪除的行和列,可以在刪除操作之前獲取需要?jiǎng)h除的行或列的索引,并在刪除后將這些行或列打印出來。
方法:打印刪除的行和列
以下是刪除全為 0 的行或列并打印它們的完整代碼示例。
示例代碼
import pandas as pd# 示例數(shù)據(jù)
data = {'A': [0, 2, 0, 4],'B': [0, 0, 0, 0],'C': [0, 10, 11, 12]
}
df = pd.DataFrame(data)print("原始數(shù)據(jù):")
print(df)# 找到需要?jiǎng)h除的行和列
rows_to_delete = df.index[(df == 0).all(axis=1)].tolist() # 行索引
cols_to_delete = df.columns[(df == 0).all(axis=0)].tolist() # 列名稱# 刪除這些行和列
df_cleaned = df.drop(index=rows_to_delete, columns=cols_to_delete)# 打印刪除的行和列
print("\n刪除的行索引:", rows_to_delete)
print("刪除的列名稱:", cols_to_delete)# 打印刪除后的 DataFrame
print("\n刪除后的數(shù)據(jù):")
print(df_cleaned)
代碼解釋
-
找到需要?jiǎng)h除的行和列:
rows_to_delete = df.index[(df == 0).all(axis=1)]
:df == 0
:生成一個(gè)布爾矩陣,表示每個(gè)值是否為 0。.all(axis=1)
:檢查每一行是否全為 0。df.index[...]
:返回需要?jiǎng)h除的行的索引。
cols_to_delete = df.columns[(df == 0).all(axis=0)]
:.all(axis=0)
:檢查每一列是否全為 0。df.columns[...]
:返回需要?jiǎng)h除的列的名稱。
-
刪除這些行和列:
- 使用
drop()
方法同時(shí)刪除行和列。
- 使用
-
打印刪除的行和列:
rows_to_delete
和cols_to_delete
保存了被刪除的行和列的索引和名稱,可以直接打印。
-
打印刪除后的 DataFrame:
- 檢查最終清理后的數(shù)據(jù)。
輸出示例
原始數(shù)據(jù):
A B C
0 0 0 0
1 2 0 10
2 0 0 11
3 4 0 12
輸出:
刪除的行索引: [0]
刪除的列名稱: ['B']刪除后的數(shù)據(jù):A C
1 2.0 10
2 0.0 11
3 4.0 12
擴(kuò)展:原地刪除并打印
如果需要直接在原始 DataFrame 中刪除,同時(shí)打印出被刪除的行和列:
# 找到需要?jiǎng)h除的行和列
rows_to_delete = df.index[(df == 0).all(axis=1)].tolist()
cols_to_delete = df.columns[(df == 0).all(axis=0)].tolist()# 打印即將刪除的行和列
print("\n即將刪除的行索引:", rows_to_delete)
print("即將刪除的列名稱:", cols_to_delete)# 原地刪除
df.drop(index=rows_to_delete, columns=cols_to_delete, inplace=True)# 打印最終結(jié)果
print("\n刪除后的數(shù)據(jù):")
print(df)
總結(jié)
操作 | 示例代碼 |
---|---|
找到需要?jiǎng)h除的行索引 | rows_to_delete = df.index[(df == 0).all(axis=1)].tolist() |
找到需要?jiǎng)h除的列名稱 | cols_to_delete = df.columns[(df == 0).all(axis=0)].tolist() |
打印刪除的行和列 | print("刪除的行索引:", rows_to_delete) 和 print("刪除的列名稱:", cols_to_delete) |
刪除行和列 | df.drop(index=rows_to_delete, columns=cols_to_delete) |