向量化计算时如何处理类型错误?
How to handle typeErrors when doing vectorize calculations?
我想在使用 pandas 数据帧 (python-3.6) 执行向量化计算时避免崩溃。
例如,我有一个包含 2 列 A、B 的数据框。我想创建一个 C 列,它将是 C = A - B。但是 A 列中的一个单元格是一个字符串,这会导致 TypeError。看看下面的图片。
C 栏是我想要达到的结果。
目前我收到类型错误消息:
TypeError: unsupported operand type(s) for -: 'float' and 'str'
这是预期的。
可以通过 numpy.select
,但在输出中得到混合值:
df = pd.DataFrame({
'A':[7,8,9,10,5],
'B':[1,2,3,'str',np.nan],
})
b = pd.to_numeric(df['B'], errors='coerce')
df['C'] = np.select([df['B'].isna(), b.isna()], [np.nan, 'ERROR'], default=df['A'] - b)
print (df)
A B C
0 7 1 6.0
1 8 2 6.0
2 9 3 6.0
3 10 str ERROR
4 5 NaN nan
最好是通过to_numeric
转成数字,只有后面需要处理的列才减去:
b = pd.to_numeric(df['B'], errors='coerce')
df['C'] = df['A'] - b
print (df)
A B C
0 7 1 6.0
1 8 2 6.0
2 9 3 6.0
3 10 str NaN
4 5 NaN NaN
我想在使用 pandas 数据帧 (python-3.6) 执行向量化计算时避免崩溃。
例如,我有一个包含 2 列 A、B 的数据框。我想创建一个 C 列,它将是 C = A - B。但是 A 列中的一个单元格是一个字符串,这会导致 TypeError。看看下面的图片。
C 栏是我想要达到的结果。
目前我收到类型错误消息:
TypeError: unsupported operand type(s) for -: 'float' and 'str'
这是预期的。
可以通过 numpy.select
,但在输出中得到混合值:
df = pd.DataFrame({
'A':[7,8,9,10,5],
'B':[1,2,3,'str',np.nan],
})
b = pd.to_numeric(df['B'], errors='coerce')
df['C'] = np.select([df['B'].isna(), b.isna()], [np.nan, 'ERROR'], default=df['A'] - b)
print (df)
A B C
0 7 1 6.0
1 8 2 6.0
2 9 3 6.0
3 10 str ERROR
4 5 NaN nan
最好是通过to_numeric
转成数字,只有后面需要处理的列才减去:
b = pd.to_numeric(df['B'], errors='coerce')
df['C'] = df['A'] - b
print (df)
A B C
0 7 1 6.0
1 8 2 6.0
2 9 3 6.0
3 10 str NaN
4 5 NaN NaN