我有一个数据框,我将其扩展为包含 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]))
添加回答
举报
0/150
提交
取消