我有一个包含字符串值的数据框列。我想过滤到具有整数的行。我可以执行以下操作来查找它是否是数字,但这也会返回浮点数。
result = pd.to_numeric(df['col1'], errors='coerce').notnull()
应该返回“1”
不应返回“1.1”。
如何过滤为整数(不包括漂浮)?
可以使用
.is_integer()
方法来检查数字是否为整数。 以下是的操作方法:
df[pd.to_numeric(df['col1'], errors='coerce').apply(lambda x: x.is_integer() if not pd.isna(x) else False)]
让我们来分解一下这段代码:
-
pd.to_numeric(df['col1'], errors='coerce')
: 这部分与所做的相同,它会尝试将“col1”中的值转换为数字。如果无法转换某个值(例如,如果它是文本字符串),则将其设置为NaN
。 -
.apply(lambda x: x.is_integer() if not pd.isna(x) else False)
: 这部分对to_numeric
生成的结果应用了一个函数。Lambda 函数检查值是否是NaN
。如果不是NaN
,它将使用.is_integer()
方法检查它是否是整数。如果是整数,则返回True
,否则返回False
。如果是NaN
,它也会返回False
。 -
df[...]
: 最后,我们将布尔索引的结果列表作为过滤器应用于原始数据框,只选择值为True
的行,即转换为整数的行。
这将为提供一个仅包含“col1”中具有整数值的行的数据框。
以下是一个示例:
import pandas as pd
df = pd.DataFrame({'col1': ['1', '1.1', '2', 'abc', '3.0']})
filtered_df = df[pd.to_numeric(df['col1'], errors='coerce').apply(lambda x: x.is_integer() if not pd.isna(x) else False)]
print(filtered_df)
输出:
col1
0 1
2 2
如所见,只有值为“1”和“2”的行被保留了下来,因为只有这些值是整数。
标签:python,pandas From: 78799154