我創建了以下 pandas 資料框,它是我正在使用的資料框的縮短版本:
data = {'U.S. Custom Ports': ['Aberdeen, WA', 'Baltimore, MD'],
'Year': ['2017', '2018'],
'ImportTons': ['172,000.00', '180,000.00'],
'ExportTons': ['10,000.00', 'second_value'],
'CoastalName': ['Pacific', 'Atlantic'],
'City': ['Aberdeen', 'Baltimore'],
'State': ['WA', 'MD'],
'Difference': ['0.00', '73,000.00'],
}
df = pd.DataFrame(data)
df
輸出此資料幀:

然后我的目標是撰寫一個帶有兩個引數(城市,州)的函式,但是
如果城市未出現在資料框中,則該函式應顯示錯誤訊息“城市不存在”。
如果城市出現但組合中沒有該州,則該函式應顯示錯誤訊息“輸入無效”。
如果城市和州組合出現在資料框中,則該函式應顯示按年份排序的城市、州、年份、ImportTons、ExportTons 和差異,最舊的年份首先顯示。
我的代碼:
def BestYears(City,State):
for index,row in df.iterrows():
combo = (row['City'],row['State'])
if (City != combo[0]):
print('City does not exist')
if (City == combo[0] and State != combo[1]):
print('Invalid Input')
else:
output_df = df[["City","State","Year","ExportTons","Difference"]].sort_values(by='Year')
return output_df
BestYears('Baltimore','jake')
BestYears('Baltimore','MD')
它產生的輸出:

正如你所看到的,我在第一個函式呼叫中傳遞了引數 Baltimore 并帶有不正確的狀態“jake”,我希望回傳“無效輸入”,但相反,它回傳“城市不存在”以及資料框,即函式中的最后一個條件。在第二個函式呼叫中,我輸入了正確的引數,即“巴爾的摩”和“MD”,它們都存在于資料框中,但輸出也與第一個函式呼叫相同。我能否獲得關于使我的功能正常作業可能需要考慮的方向?
uj5u.com熱心網友回復:
使用布爾掩碼:
def BestYears(city, state):
m1 = df['City'] == city
m2 = df['State'] == state
if ~m1.any():
print(f"City '{city}' does not exist")
elif ~(m1 & m2).any():
print(f"Invalid Input: '{state}'")
else:
print(f"Found: '{city}, {state}'")
# do stuff here
用法:
>>> BestYears('Boston', 'MA')
City 'Boston' does not exist
>>> BestYears('Baltimore', 'jake')
Invalid Input: 'jake'
>>> BestYears('Baltimore', 'MD')
Found: 'Baltimore, MD'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/438683.html
標籤:python-3.x 熊猫 数据框
