南宁网站建设q479185700棒深圳标本制作
在 Pandas 中,如果需要删除全部为 0 的行或列,可以通过 .all() 方法来判断行或列是否所有元素都为 0,然后删除这些行或列。
代码示例
示例数据:
import pandas as pd# 示例数据
data = {'A': [0, 2, 0, 4],'B': [0, 0, 0, 0],'C': [0, 10, 11, 12]
}
df = pd.DataFrame(data)print("原始数据:")
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. 同时删除全部为 0 的行和列
可以结合以上两个方法,先删除全部为 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
 
参数解释
(df == 0).all(axis=1):axis=1表示按行判断,检查每一行是否全为0。- 返回一个布尔数组,用于判断哪些行满足条件。
 
(df == 0).all(axis=0):axis=0表示按列判断,检查每一列是否全为0。- 返回一个布尔数组,用于判断哪些列满足条件。
 
扩展:原地删除(inplace=True)
 
如果希望直接修改原 DataFrame 而不返回新的对象,可以结合 inplace=True 选项。
示例:
# 删除全为 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)
 
总结
| 操作 | 示例代码 | 
|---|---|
| 删除全为 0 的行 | df.loc[~(df == 0).all(axis=1)] | 
| 删除全为 0 的列 | df.loc[:, ~(df == 0).all(axis=0)] | 
| 同时删除全为 0 的行和列 | 结合上述两条代码 | 
打印删除了哪些行和列
要打印出被删除的行和列,可以在删除操作之前获取需要删除的行或列的索引,并在删除后将这些行或列打印出来。
方法:打印删除的行和列
以下是删除全为 0 的行或列并打印它们的完整代码示例。
示例代码
import pandas as pd# 示例数据
data = {'A': [0, 2, 0, 4],'B': [0, 0, 0, 0],'C': [0, 10, 11, 12]
}
df = pd.DataFrame(data)print("原始数据:")
print(df)# 找到需要删除的行和列
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删除后的数据:")
print(df_cleaned)
 
代码解释
-  
找到需要删除的行和列:
rows_to_delete = df.index[(df == 0).all(axis=1)]:df == 0:生成一个布尔矩阵,表示每个值是否为 0。.all(axis=1):检查每一行是否全为 0。df.index[...]:返回需要删除的行的索引。
cols_to_delete = df.columns[(df == 0).all(axis=0)]:.all(axis=0):检查每一列是否全为 0。df.columns[...]:返回需要删除的列的名称。
 -  
删除这些行和列:
- 使用 
drop()方法同时删除行和列。 
 - 使用 
 -  
打印删除的行和列:
rows_to_delete和cols_to_delete保存了被删除的行和列的索引和名称,可以直接打印。
 -  
打印删除后的 DataFrame:
- 检查最终清理后的数据。
 
 
输出示例
原始数据:
   A  B   C
0  0  0   0
1  2  0  10
2  0  0  11
3  4  0  12
 
输出:
删除的行索引: [0]
删除的列名称: ['B']删除后的数据:A   C
1  2.0  10
2  0.0  11
3  4.0  12
 
扩展:原地删除并打印
如果需要直接在原始 DataFrame 中删除,同时打印出被删除的行和列:
# 找到需要删除的行和列
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)# 打印最终结果
print("\n删除后的数据:")
print(df)
 
总结
| 操作 | 示例代码 | 
|---|---|
| 找到需要删除的行索引 | rows_to_delete = df.index[(df == 0).all(axis=1)].tolist() | 
| 找到需要删除的列名称 | 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) | 
