为了账号安全,请及时绑定邮箱和手机立即绑定

防止 NaN 成为数据帧数据透视表中的索引和列

防止 NaN 成为数据帧数据透视表中的索引和列

UYOU 2021-08-17 16:56:31
我有一个数据框,我将其扩展为包含 2 列中所有增量的值。因此,正如预期和期望的那样,引入了 NaN 值。但是,当我在这个数据框上使用数据透视表时,我会得到 NaN 的行和列。做枢轴时我可以防止这种情况吗?如果没有,如何删除名为 NaN 的列?试图通过调用 [NaN],[nan] 或 ['NaN'] 来删除它是行不通的。删除所有值为 NaN 的列和行在这种情况下不起作用,因为列标题和索引用于 seaborn 热图,因此即使所有单元格值都是 NaN,将其作为索引和键值仍然有用不是 NaN示例代码;import pandas as pdimport numpy as np#generate dummy datadf = pd.DataFrame({'Y': np.random.randint(130,140,10),                   'X': np.random.randint(5,10,10),                   'Z': np.random.randint(0,25, size=10)})df = df.round(1)#create dataset for heatmap#group by axis to plotdf = df.groupby(['X','Y']).sum().reset_index()df = df.sort_values(by=['Y'])dfY = pd.DataFrame({'Y':np.arange(min(df['Y']), max(df['Y']),1)})dfX = pd.DataFrame({'X':np.arange(min(df['X']), max(df['X']),1)})df = pd.merge(df,dfY, how='outer', on='Y')df = pd.merge(df,dfX, how='outer', on='X')df = df.round(1)print(df)#restructure for heatmapdata = df.pivot("Y","X","Z").sort_values(by=['Y'],ascending=False)print(data)枢轴前的示例数据帧:      X      Y     Z0   5.0  132.0   0.01   5.0  135.0  20.02   5.0  137.0  17.03   7.0  132.0  15.04   7.0  133.0   3.05   6.0  133.0  30.06   6.0  135.0  22.07   6.0  138.0  16.08   9.0  135.0   9.09   NaN  134.0   NaN10  NaN  136.0   NaN11  8.0    NaN   NaN枢轴后:X       NaN    5.0   6.0   7.0   8.0   9.0Y                                          138.0   NaN   NaN  16.0   NaN   NaN   NaN 137.0   NaN  17.0   NaN   NaN   NaN   NaN 136.0   NaN   NaN   NaN   NaN   NaN   NaN 135.0   NaN  20.0  22.0   NaN   NaN   9.0 134.0   NaN   NaN   NaN   NaN   NaN   NaN 133.0   NaN   NaN  30.0   3.0   NaN   NaN 132.0   NaN   0.0   NaN  15.0   NaN   NaNNaN      NaN   NaN   NaN   NaN   NaN   NaN期望的输出:X        5.0   6.0   7.0   8.0   9.0Y                                          138.0   NaN  16.0   NaN   NaN   NaN 137.0  17.0   NaN   NaN   NaN   NaN 136.0   NaN   NaN   NaN   NaN   NaN 135.0  20.0  22.0   NaN   NaN   9.0 134.0   NaN   NaN   NaN   NaN   NaN 133.0   NaN  30.0   3.0   NaN   NaN 132.0   0.0   NaN  15.0   NaN   NaN
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

对我来说,drop通过缺失值工作np.nan:


data = (df.pivot("Y","X","Z")

         .sort_values(by=['Y'],ascending=False)

         .drop(np.nan, axis=1)

         .drop(np.nan))

要么:


data = df.pivot("Y","X","Z").sort_values(by=['Y'],ascending=False)


data = data.reindex(index=data.index.difference([np.nan]),

                    columns=data.columns.difference([np.nan]))


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信