首页 > 解决方案 > 如何使用字符串和“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'

我不知道如何解决这个问题,有人可以帮忙吗?

标签: pythonpandasdataframedata-sciencedata-extraction

解决方案


最简单的方法是首先将 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")

推荐阅读