检查在pandas数据框架中列是否包含包含float值的对象



假设我有一个包含包含float的对象的列(如"12.45")。如何检查该列在熊猫数据框中是否存在?我想先找到这一列然后把它的所有值转换成浮点数。换句话说,我如何查找包含浮点数"12.54"等数值的对象的列。我不想查找包含非数值的对象,如"cat"或";dog"

例如:

import pandas as pd
df = pd.DataFrame({"column1":[ "12.44", "56.78", "45.87"],
"column2":["cat", "dog", "horse"]})

我想检查列中是否存在column1以便将它的所有值转换为float

您可以使用pd.to_numeric尝试将字符串转换为数值。然后,使用.applymap()isinstance(x, float)检查转换列中的每个元素是否为float类型的实例。最后,检查.any()类型为float的列中的任何列值:

df.apply(pd.to_numeric, errors="ignore").applymap(lambda x: isinstance(x, float), na_action='ignore').any()

结果:

column1     True
column2    False
dtype: bool

column1True值对应它至少有一个float类型的元素

实际上,该解决方案还可以通过删除末尾的.any()来检查单个元素是否为float类型:

df.apply(pd.to_numeric, errors="ignore").applymap(lambda x: isinstance(x, float), na_action='ignore')

结果:

column1  column2
0     True    False
1     True    False
2     True    False

您可以尝试逐列转换,并在此过程中捕获错误。不能转换的列是不变的,因为在重新分配列之前引发异常。

import pandas as pd
df = pd.DataFrame({"column1":[ "12.44", "56.78", "45.87"],
"column2":["cat", "dog", "horse"],
"column3":["1", "2", "3"]})
for colname in df.columns:
try:
df[colname] = df[colname].astype('float')
print(f"{colname} converted")
except ValueError:
print(f"{colname} failed")

print(df.dtypes)

相关内容

  • 没有找到相关文章

最新更新