假设我有一个包含包含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
column1
的True
值对应它至少有一个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)