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

我有一个数据框,我将其扩展为包含 2 列中所有增量的值。因此,正如预期和期望的那样,引入了 NaN 值。


但是,当我在这个数据框上使用数据透视表时,我会得到 NaN 的行和列。做枢轴时我可以防止这种情况吗?如果没有,如何删除名为 NaN 的列?试图通过调用 [NaN],[nan] 或 ['NaN'] 来删除它是行不通的。


删除所有值为 NaN 的列和行在这种情况下不起作用,因为列标题和索引用于 seaborn 热图,因此即使所有单元格值都是 NaN,将其作为索引和键值仍然有用不是 NaN


示例代码;


import pandas as pd

import numpy as np


#generate dummy data

df = 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 plot

df = 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 heatmap

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

print(data)

枢轴前的示例数据帧:


      X      Y     Z

0   5.0  132.0   0.0

1   5.0  135.0  20.0

2   5.0  137.0  17.0

3   7.0  132.0  15.0

4   7.0  133.0   3.0

5   6.0  133.0  30.0

6   6.0  135.0  22.0

7   6.0  138.0  16.0

8   9.0  135.0   9.0

9   NaN  134.0   NaN

10  NaN  136.0   NaN

11  8.0    NaN   NaN

枢轴后:


X       NaN    5.0   6.0   7.0   8.0   9.0

Y                                         

 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   NaN

NaN      NaN   NaN   NaN   NaN   NaN   NaN

期望的输出:


X        5.0   6.0   7.0   8.0   9.0

Y                                         

 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


UYOU
浏览 202回答 1
1回答

胡说叔叔

对我来说,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]))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python