python - 如何使用字符串和“inf”值删除数据框中的某些单元格?
问题描述
总的来说,我是熊猫和数据科学的新手。我有我必须得到平均值的数据,但是数据非常大(大约 15000 行),并且数据框的一些单元格有字符串(比如 #NEXT? 在计算时给出值 -inf平均值)和一些除法时的值(一些值为零)给出NaN,但其中一些给出值'inf',因此总平均值为'inf'。我想摆脱这些类型的价值观。有人可以告诉我在对列进行操作时如何忽略这些值吗?
我尝试了很多事情,比如遍历数据框的整个列并删除这些值。
x_wto_inf = []
for i in reports.iterrows():
x = reports['y_cost'][i] / reports['z_calls'][i]
if x == 'inf':
break
else:
x_wto_inf.append(x)
x_wto_inf_df = pd.DataFrame(x_wto_inf, columns = ['x_wto_inf'])
这给了我一个错误。
ValueError: Can only tuple-index with a MultiIndex
我还尝试仅读取数据框中列的所有值,然后将其放入下面给出的循环中。
y_cost_var = reports['y_cost']
y_cost_var_val = y_cost_var.values
y_cost_var_val
z_calls_var = reports['z_calls']
z_calls_var_val = z_calls_var.values
z_cost_var_val
然后将值划分为数组,但这也给了我一个错误。
IndexError: only integers, slices (`:`), ellipsis (`...`), NumPy.newaxis (`None`), and integer or boolean arrays are valid indices
有人可以帮我吗?我将永远感激它。谢谢你。
更新
我试过这段代码,
reports_Copy1 = reports_Copy.replace([np.inf, -np.inf], 0)
reports_Copy1 = reports_Copy.replace('#NEXT?', 0)
reports_Copy1.iloc[3177]
reports_Copy1.iloc[3184]
打印这些结果时,它会将所有这些值显示为零,如下所示,
responsiveness 0
但取其平均值仍然给了我'-inf'
我不知道如何解决这个问题,有人可以帮忙吗?
解决方案
最简单的方法是首先将 infs 替换为 NaN:
df.replace([np.inf, -np.inf], np.nan)
然后使用dropna:
df.replace([np.inf, -np.inf], np.nan).dropna(subset=["col1", "col2"], how="all")