第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用類似行列表中的值快速填充一行中的 NaN 值

如何使用類似行列表中的值快速填充一行中的 NaN 值

森林海 2021-09-25 16:58:44
我有一個(gè)大數(shù)據(jù)框(大約 800,000 行)。近 30% 的行具有 NaN 值,例如,test = pd.DataFrame({"name": [1,2,3,4,5,6,7],                      "col1": ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'],                      "col2": [4, 5, 6, np.nan, np.nan, 8, 5],                      "col3": [7, 8, 9, np.nan, np.nan, 3, 7],                      "col4": [7, 8, 9, np.nan, np.nan, 2, 6]})    name  col1  col2   col3  col4    0    1     c1    4.0    7.0   7.01    2     c2    5.0    8.0   8.0    2    3     c3    6.0    9.0   9.0    3    4     c4    NaN    NaN   NaN    4    5     c5    NaN    NaN   NaN    5    6     c6    8.0    3.0   2.0    6    7     c7    5.0    7.0   6.0現(xiàn)在我在 row3 和 row4 中有 NaN。根據(jù)一些規(guī)則,我得到 row3 最相似的行是similar_for_row3 = ['name' = 10, 'name' = 3, 'name' = 1]而對(duì)于 row4 是similar_for_row4 = ['name' = 2, 'name' = 6, 'name' = 20].然后,我的問(wèn)題是:我怎么可以快速檢查,如果這些行中similar_for_row3,并similar_for_row4在數(shù)據(jù)幀,例如,'name' = 10而'name' = 20不是它??焖儆肗aN相似行中的值替換一行中的值。例如,對(duì)于row3,我們首先檢查 中的所有行similar_for_row3,然后使用 Dataframe 中存在的第一行(即test.loc[test['name' == 3]])來(lái)替換NaN中的row3。輸出是:    name  col1  col2   col3  col4    0    1     c1    4.0    7.0   7.0    1    2     c2    5.0    8.0   8.0    2    3     c3    6.0    9.0   9.0    3    4     c4    6.0    9.0   9.0  -> replace NaN with 'name' = 3    4    5     c5    NaN    NaN   NaN    5    6     c6    8.0    3.0   2.0    6    7     c7    5.0    7.0   6.0我試圖用“for 循環(huán)”迭代所有數(shù)據(jù)幀來(lái)替換 NaN 值,但速度很慢。更換一行大約需要 3 秒鐘。我的數(shù)據(jù)集有 800,000 行。這將花費(fèi)我一個(gè)月的時(shí)間來(lái)完成。請(qǐng)幫忙!
查看完整描述

1 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

如何快速檢查similar_for_row3 和similar_for_row4 中的這些行是否在Dataframe 中,例如'name' = 10 和'name' = 20 不在其中。

您可以sets使用&和 usesorted設(shè)置找到兩者的交集,key= similar_for_row3.index以便使用出現(xiàn)的第一個(gè)交集similar_for_row3:


similar_for_row4 = [2, 6, 20]

fill_with  = sorted(list(set(similar_for_row4) & set(test.name.values)), 

       key= similar_for_row4.index)[0]

#2

所以這里第 2 行將用于替換第 4 行,正如您提到的“數(shù)據(jù)幀中存在的第一行”。


用相似行中的值快速替換一行中的 NaN 值。例如,對(duì)于row3,我們首先檢查similar_for_row3中的所有行,然后使用Dataframe中存在的第一行(即test.loc[test['name' == 3]])替換row3中的NaN。

您可以首先使用.isnull()在特定行上切片的數(shù)據(jù)幀創(chuàng)建一個(gè)掩碼,并在數(shù)據(jù)幀上執(zhí)行布爾索引以過(guò)濾對(duì)應(yīng)列,在本例中為第 2 行:


row = 4

mask = test.loc[row, :].isnull().squeeze()

test.loc[row, mask] = test.loc[fill_with, mask].values

因此,對(duì)于此示例,您將擁有:


    name col1 col2  col3  col4

0     1   c1   4.0   7.0   7.0

1     2   c2   5.0   8.0   8.0

2     3   c3   6.0   9.0   9.0

3     4   c4   NaN   NaN   NaN

4     5   c5   6.0   9.0   9.0

5     6   c6   8.0   3.0   2.0

6     7   c7   5.0   7.0   6.0

更新


為了輕松檢測(cè)存在任何 NaN 的行,您可以執(zhí)行以下操作:


has_nans = test[test.isnull().any(axis=1)].index.values

并且簡(jiǎn)單地循環(huán)has_nans查找在每次迭代中替換的最相似的行。


查看完整回答
反對(duì) 回復(fù) 2021-09-25
  • 1 回答
  • 0 關(guān)注
  • 250 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)