首页 > 解决方案 > 用编号变量填充 DataFrame 上的空白 - Python Pandas

问题描述

我有一个格式的 DataFrame:

ID    Theme    Operation    Volume
100  Jungle       S3         Full
200  Desert       S3         Full
302  Cavern       S1         Empty
303  Swamp        nan        Full
400  Jungle       S3          nan
600  Desert       nan        Empty

我想编写一个脚本,遍历空单元格并从“nan”重新分配它们,并用变量 NA_ 替换它们,其中 _ 是它们缺少多少变量的计数。所以我想要的输出是:

ID    Theme    Operation    Volume
100  Jungle       S3         Full
200  Desert       S3         Full
302  Cavern       S1         Empty
303  Swamp        NA1        Full
400  Jungle       S3          NA3
600  Desert       NA2        Empty

当我尝试遍历 df 并识别 nan 值时,由于某种原因,以下内容不起作用。

count = 0
for col in df.colums:
    for row in df[col]:
        if row == float('nan'):
            row = 'NA{}'.format(count)
            count += 1

任何想法为什么?或者有没有更好的方法来做到这一点,我很难看到?

谢谢 :)

标签: pythonpandasdataframe

解决方案


连接您的列,将 NaN 替换为 NA_ (_ 替换为num)并拆分您的列。最后将修改后的列覆盖到您的原始数据框:

tmp = df.reset_index().melt(id_vars='index', value_vars=['Operation', 'Volume'])
num = (tmp['value'].isna().cumsum()).astype(int)
tmp['value'] = tmp['value'].fillna('NA' + num.astype(str))
tmp = tmp.pivot(index='index', columns='variable', values='value')
df[tmp.columns] = tmp
>>> df
    ID   Theme Operation Volume
0  100  Jungle        S3   Full
1  200  Desert        S3   Full
2  302  Cavern        S1  Empty
3  303   Swamp       NA1   Full
4  400  Jungle        S3    NA3
5  600  Desert       NA2  Empty

推荐阅读