有效清理数据在数据分析和操作中至关重要。一项常见的任务是通过删除负值来清理数据,尤其是当它们被视为异常值或无效条目时。Python 中的 Pandas 库 提供了几种有效的方法来实现这一点。本文将提供三个例子,说明如何在 Pandas DataFrame 中删除负值。
删除 Pandas DataFrame 中的负值
在从 DataFrame 中删除负值之前,我们首先需要找到它们,Pandas 通过其灵活的索引和选择功能使检索很好实现,找到负值后,可以从 DataFrame 中删除负值。这可以通过应用布尔掩码来筛选掉包含负值的行或列来完成。有多种方法可以实现此目的,具体取决于是要删除整行还是特定列。
以下是在 Pandas DataFrame 中删除负值的几个不同示例。
从单列中删除负值
此方法使用布尔索引来筛选出 Pandas DataFrame 中任何值为负数的行,确保生成的 DataFrame (df_filtered) 在“A”和“B”列中仅包含非负值。
import pandas as pd # Sample DataFrame data = {'A': [1, 2, -3, 4, -5], 'B': [5, -6, 7, 8, 9]} df = pd.DataFrame(data) # Method 1: Using boolean indexing df_filtered = df[df >= 0].dropna() print("DataFrame after dropping negative values:") print(df_filtered)
输出:
DataFrame after dropping negative values: A B 0 1.0 5.0 3 4.0 8.0
删除所有列中具有负值的行
通过将 lambda 函数与 applymap() 一起应用,此方法将 DataFrame 所有元素中的负值替换为 None,然后使用 dropna() 删除包含任何 None 值的行,从而生成没有负值的df_filtered。
import pandas as pd # Sample DataFrame data = {'A': [1, 2, -3, 4, -5], 'B': [5, -6, 7, 8, 9]} df = pd.DataFrame(data) # Method 2: Using applymap and dropna df_filtered = df.applymap(lambda x: x if x >= 0 else None).dropna() print("DataFrame after dropping negative values:") print(df_filtered)
删除所有列中具有负值的行
使用 .ge() 和 .all(),此方法选择列“A”和“B”中所有值均为非负值 (>= 0) 的行,从而有效地过滤掉具有任何负值的行,并生成仅具有非负行完好无损的行df_filtered。
import pandas as pd # Sample DataFrame data = {'A': [1, 2, -3, 4, -5], 'B': [5, -6, 7, 8, 9]} df = pd.DataFrame(data) # Method 3: Using all and dropna df_filtered = df[df.ge(0).all(1)] print("DataFrame after dropping rows with negative values:") print(df_filtered)
输出:
DataFrame after dropping negative values: A B 0 1 5 3 4 8
结论
从 Pandas DataFrame 中删除负值对于数据完整性和分析至关重要。通过使用这些方法,您可以有效地清理数据并专注于核心业务。