我的腳本有問題,它會生成 KeyError:“找不到一個或多個行標簽”
df1 = pd.DataFrame({'Destcode' : ['A','B','C','D','E','F','G'],
'City A' : ['Available','Available','Available','Available','Not Available','Not Available','Available'],
'City B' : ['Not Available','Available','Not Available','Available','Not Available','Not Available','Available'],
'City C' : ['Available','Available','Not Available','Available','Not Available','Available','Available']})
df2 = pd.DataFrame({'Destcode' : ['C','F','G','D','E'],
'Origin' : ['City A','City C','City A','City B','City D']})
所以,我有 2 個 DataFrame。
資料幀 1
df1
Destcode City A City B City C
0 A Available Not Available Available
1 B Available Available Available
2 C Available Not Available Not Available
3 D Available Available Available
4 E Not Available Not Available Not Available
5 F Not Available Not Available Available
6 G Available Available Available
資料幀 2
df2
Destcode Origin
0 C City A
1 F City C
2 G City A
3 D City B
4 E City D
我運行這個腳本
df2['Cek Available'] = df1.set_index('Destcode').lookup(df2.Destcode, df2.Origin)
我收到一個錯誤,請 在此處輸入圖片描述
我知道問題出在 Origin City D 中,它不在 DataFrame df1 中。
如果您要查找的資料不存在,您將如何執行此操作,它將回傳值“不可用”?請幫我解決這個問題
Destcode Origin Cek Available
0 C City A ?
1 F City C ?
2 G City A ?
3 D City B ?
4 E City D ?
uj5u.com熱心網友回復:
您可以使用try/except和for回圈:
cek = []
df1 = df1.set_index('Destcode')
for c, o in zip(df2['Destcode'], df2['Origin']):
try:
x = df1.loc[c,o]
except:
x = np.nan
cek.append(x)
df2['Cek Available'] = cek
輸出:
Destcode Origin Cek Available
0 C City A Available
1 F City C Available
2 G City A Available
3 D City B Available
4 E City D NaN
uj5u.com熱心網友回復:
當資料采用整潔的資料格式時,資料通常更容易處理。融化df1并加入。
df3 = df1.melt(id_vars="Destcode", var_name="Origin")
df2.merge(df3, on=["Destcode", "Origin"], how="left")
結果是
Destcode Origin value
0 C City A Available
1 F City C Available
2 G City A Available
3 D City B Available
4 E City D NaN
uj5u.com熱心網友回復:
我會使用get和melt:
x = df1.melt(id_vars='Destcode', var_name='Origin').set_index(['Destcode', 'Origin']).squeeze()
df2['Cek Available'] = df2.apply(lambda y: x.get(tuple(y), np.nan), axis=1)
輸出:
>>> df2
Destcode Origin Cek Available
0 C City A Available
1 F City C Available
2 G City A Available
3 D City B Available
4 E City D NaN
>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337909.html
