gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:46:02 24 4
gpt4 key购买 nike

我有一个数据框,我将其扩展为包含 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

最佳答案

对我来说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]))

关于python - 防止 NaN 成为数据帧透视中的索引和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53300244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com