簡體   English   中英

用編號變量填空 DataFrame - Python Pandas

[英]Filling in blanks on a DataFrame with numbered variables - 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_ 替換它們,其中 _ 是它們缺少變量的計數。 所以我想要的 output 是:

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

任何想法為什么? 或者有沒有更好的方法來做到這一點,我很難看到?

謝謝:)

連接您的列,將 NaN 替換為 NA_(_ 替換為num )並拆分您的列。 最后將修改后的列覆蓋為原始 dataframe:

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

有點困難,但並非不可能。

重要的是在對column進行排序時創建層次結構 --> index以根據值是否為 NA 創建每列的累積和。 基本上您不希望在操作之前計算 Volume NA 值。

s = df.stack(dropna=False).reset_index()

s['level_1'] = pd.Categorical(s['level_1'],categories=df.columns.tolist())

s1 = s.sort_values(by=['level_1','level_0']).set_index(['level_0','level_1']
                 ).isna().cumsum().unstack(1).droplevel(0,1)

df = df.fillna('NA_' + s1.astype(str))

    ID   Theme Operation Volume
0  100  Jungle        S3   Full
1  200  Desert        S3   Full
2  302  Cavern        S1  Empty
3  303   Swamp      NA_1   Full
4  400  Jungle        S3   NA_3
5  600  Desert      NA_2  Empty

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM