在 Pandas DataFrame 操作中处理零或 NaN
Handling Zeros or NaNs in a Pandas DataFrame operations
我有一个 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)
假设所有值都是正数(从您的示例和描述看来),请尝试:
stats.genpareto.fit(df[df[column] > 0][column])
这会过滤每一列以仅对正值进行操作。
或者,如果允许负值,
stats.genpareto.fit(df[df[column] != 0][column])
语法比较乱,改一下
shape1, location1, scale1=stats.genpareto.fit(df[column])
到
shape1, location1, scale1=stats.genpareto.fit(df[column][df[column].nonzero()[0]])
解释:df[column].nonzero()
returns 一个大小为 (1,)
的元组,其唯一元素 [0]
是一个包含索引标签的 numpy 数组,其中 [=15] =] 是非零的。要通过这些非零标签索引 df[column]
,您可以使用 df[column][df[column].nonzero()[0]]
.
我有一个 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)
假设所有值都是正数(从您的示例和描述看来),请尝试:
stats.genpareto.fit(df[df[column] > 0][column])
这会过滤每一列以仅对正值进行操作。 或者,如果允许负值,
stats.genpareto.fit(df[df[column] != 0][column])
语法比较乱,改一下
shape1, location1, scale1=stats.genpareto.fit(df[column])
到
shape1, location1, scale1=stats.genpareto.fit(df[column][df[column].nonzero()[0]])
解释:df[column].nonzero()
returns 一个大小为 (1,)
的元组,其唯一元素 [0]
是一个包含索引标签的 numpy 数组,其中 [=15] =] 是非零的。要通过这些非零标签索引 df[column]
,您可以使用 df[column][df[column].nonzero()[0]]
.