Python 在数据帧操作中处理零或非
我有一个数据帧(df),如下所示,其中每个列从最大到最小排序,用于频率分析。由于每列的长度不同,因此会留下一些值,即0或NaN值Python 在数据帧操作中处理零或非,python,pandas,nan,zero,Python,Pandas,Nan,Zero,我有一个数据帧(df),如下所示,其中每个列从最大到最小排序,用于频率分析。由于每列的长度不同,因此会留下一些值,即0或NaN值 08FB006 08FC001 08FC003 08FC005 08GD004 ---------------------------------------------- 0 253 872 256 11.80 2660 1 250 850 255 10.60 2510 2 246
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)
假设所有值均为正值(如您的示例和描述所示),请尝试: 这将过滤每一列,以便仅对正值进行操作。 或者,如果允许负值
stats.genpareto.fit(df[df[column] != 0][column])
语法很混乱,但会发生变化
shape1, location1, scale1=stats.genpareto.fit(df[column])
到
说明:
df[column].nonzero()
返回一个大小为(1,)
的元组,其唯一元素element[0]
是一个numpy数组,该数组包含df
为非零的索引标签。要通过这些非零标签索引df[column]
,您可以使用df[column][df[column].nonzero()[0]]
,谢谢您的解释:)@andersource的语法比我的干净多了!
shape1, location1, scale1=stats.genpareto.fit(df[column])
shape1, location1, scale1=stats.genpareto.fit(df[column][df[column].nonzero()[0]])