Python 如何找到哪些单元格不能';不能转换成浮动吗?
Python 如何找到哪些单元格不能';不能转换成浮动吗?,python,python-3.x,pandas,Python,Python 3.x,Pandas,pandas.DataFrame.astype(float)引发ValueError:无法将字符串转换为float错误 找到导致这种情况发生的单元格的最佳方法是什么?我认为您可以首先使用一些数字,例如1,使用参数errors='concurve'执行函数,如果值无法转换,则由NaN填充。然后你去查一下。最后一次用于查找包含NaN值的列和索引-这意味着显然存在string值或其他值,这些值无法转换为数字 import pandas as pd import numpy as np df = pd
pandas.DataFrame.astype(float)
引发ValueError:无法将字符串转换为float
错误
找到导致这种情况发生的单元格的最佳方法是什么?我认为您可以首先使用一些数字,例如1
,使用参数errors='concurve'
执行函数,如果值无法转换,则由NaN
填充。然后你去查一下。最后一次用于查找包含NaN
值的列和索引-这意味着显然存在string
值或其他值,这些值无法转换为数字
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['a','b','',5],
'B':[4,5,6,5],
'C':[np.nan,8,9,7]})
print (df)
A B C
0 a 4 NaN
1 b 5 8.0
2 6 9.0
3 5 5 7.0
您可以使用
dtype
属性来查找numpy对象的数据类型。
例如
这将生成一个布尔类型的输出,您可以从中轻松地进行比较
result
0 True
1 True
2 False
3 False
dtype: bool
上面的输出清楚地表明,索引2和3处的元素不是
浮点类型
,您可以简单地使用索引遍历单元格,并捕获如下错误:
for r in range(df_rows):
for c in range(df_cols):
try:
float(df[r][c])
except ValueError:
print("Conversion error at coordinates", r, c)
我不会终止循环,因为您希望看到所有问题单元格,并且可能不止一个。astype是否将尝试转换为
float
?比如如果它是一个字符串'4.5'
,它会不会把它转换成4.5
?你能验证不能转换的字符串是否是NaN
??至于NaN值,您需要指定它们应该如何转换,但是您可以使用.fillna
方法来进行转换。aType(float)
如果原始数据帧中存在float('NaN')
,则不会引发ValueError
。因此,通过这种方式,我可能会得到误报:这段代码将无法区分原始的float('nan')
和to\u numeric
创建的代码。顺便说一句,我注意到astype(float)
和to\u numeric
可以做什么有区别astype(float)
将在空字符串上引发ValueError
,而pd.to\u numeric
将在默认情况下将其转换为NaN
(即使没有errors='concurve'
)。但这不会对代码造成任何问题。不过,这很奇怪,在某些情况下,这肯定会影响逻辑。事实上,在我的例子中,我有一堆float('nan')
和一些空字符串:)如果我的答案或其他答案有用,请不要忘记。谢谢。pd.to\u numeric
的另一个奇怪之处是,如果有一个不可解析的值,使用errors='ignore'
可以保持整个列不变。我想它只会保持那些无法转换成数字的单元格不变。也许是虫子?如果不是这样的话,我们可以在应用'errors='ignore'后检查哪些单元格保留了它们原来的str
类型。我希望避免for循环,因为数据帧
很大。但这应该行得通。我认为你必须使用.iloc
;否则,如果索引恰好有整数标签,那么迭代将是错误的。我不使用pandas,因此这是一个通用的建议——并且具有简单性的优点,或者至少我这么认为。请随意更正我的答案。
df = pd.DataFrame([[1.9, 2.987, 'abcd',1]])
result = df.dtypes == np.float64
result
0 True
1 True
2 False
3 False
dtype: bool
for r in range(df_rows):
for c in range(df_cols):
try:
float(df[r][c])
except ValueError:
print("Conversion error at coordinates", r, c)