我有一個數據框,我將其擴展為包含 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
提交
取消