嗨,親愛的,我在使用 numpy.where 函式修改熊貓資料框中的某些值時遇到了麻煩。我想明確一點:如果我在單個筆記本單元格中運行此函式,它運行良好,但如果我將它插入到函式中則不會。我嘗試實作的條件是:如果某列中的某行具有某個值,則更改同一行中的值 na ,但在其他列中,否則讓我們更改該值。如果我寫:
df.speed_limit = np.where(df.way.str.contains('link'), df.speed_limit.fillna(40), df.speed_limit)
它運行并做我想做的事,但如果我寫:
def change_speed_values(df):
df.speed_limit = np.where(df.way.str.contains('link'), df.speed_limit.fillna(40), df.speed_limit)
df.speed_limit = np.where(df.way.str.contains('track'), df.speed_limit.fillna(50), df.speed_limit)
return df
它運行,但真的沒有做任何改變。所以你能幫我理解為什么會這樣嗎?
感謝您的耐心和支持。祝你美好的一天!
uj5u.com熱心網友回復:
我對其進行了測驗并且運行良好,添加了替代解決方案numpy.select:
df = pd.DataFrame({'way':['link1','link2','track1','track2'],
'speed_limit':[np.nan, 2] * 2})
print (df)
way speed_limit
0 link1 NaN
1 link2 2.0
2 track1 NaN
3 track2 2.0
df.speed_limit = np.select([df.way.str.contains('link'),
df.way.str.contains('track')],
[df.speed_limit.fillna(40),
df.speed_limit.fillna(50)], df.speed_limit)
print (df)
way speed_limit
0 link1 40.0
1 link2 2.0
2 track1 50.0
3 track2 2.0
df = pd.DataFrame({'way':['link1','link2','track1','track2'],
'speed_limit':[np.nan, 2] * 2})
# print (df)
def change_speed_values(df):
df.speed_limit = np.where(df.way.str.contains('link'), df.speed_limit.fillna(40), df.speed_limit)
df.speed_limit = np.where(df.way.str.contains('track'), df.speed_limit.fillna(50), df.speed_limit)
return df
df = change_speed_values(df)
print(df)
way speed_limit
0 link1 40.0
1 link2 2.0
2 track1 50.0
3 track2 2.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511904.html
