在Pandas DataFrame操作中处理零或NaN

时间:2018-11-22 21:44:16

标签: python pandas nan zero

我有一个DataFrame(df),如下所示,其中每一列从最大到最小排序以进行频率分析。由于每一列的长度不同,因此留下了一些零或NaN值。

   08FB006 08FC001 08FC003 08FC005 08GD004
----------------------------------------------
0   253      872    256      11.80    2660
1   250      850    255      10.60    2510
2   246      850    241      10.30    2130
3   241      827    235      9.32     1970
4   241      821    229      9.17     1900
5   232       0     228      8.93     1840
6   231       0     225      8.05     1710
7   0         0     225       0       1610
8   0         0     224       0       1590
9   0         0      0        0       1590
10  0         0      0        0       1550

我需要执行以下计算,就像每一列具有不同的长度或记录数(忽略零值)一样。我尝试使用NaN,但由于某些原因,无法对Nan值进行操作。

这是我要处理的df列的内容:

shape_list1=[]
location_list1=[]
scale_list1=[]

for column in df.columns:
    shape1, location1, scale1=stats.genpareto.fit(df[column])

    shape_list1.append(shape1)
    location_list1.append(location1)
    scale_list1.append(scale1)

2 个答案:

答案 0 :(得分:1)

假设所有值均为正(从您的示例和说明中可以看出),请尝试:

stats.genpareto.fit(df[df[column] > 0][column])

这将过滤每列以仅对正值进行运算。 或者,如果允许使用负值,

stats.genpareto.fit(df[df[column] != 0][column])

答案 1 :(得分:0)

语法混乱,但是需要更改

shape1, location1, scale1=stats.genpareto.fit(df[column])

shape1, location1, scale1=stats.genpareto.fit(df[column][df[column].nonzero()[0]])

说明:df[column].nonzero()返回一个大小为(1,)的元组,其唯一元素(元素[0])是一个numpy数组,其中包含索引标签,其中df为非零。要通过这些非零标签为df[column]编制索引,可以使用df[column][df[column].nonzero()[0]]