python - 我需要用户输入从一个数据框指向另一个数据框并显示第二个数据框-python 中的一列
问题描述
我有 2 个熊猫数据框:
我需要在状态数据框中搜索用户输入,在本例中为状态缩写,然后取相邻的值、全名并使用它来显示 parks 数据框中的正确列。我相信如果它们是一个数据框,这可能会更容易,但我想不出一种方法来做到这一点并保留所有功能;我希望能够为用户显示状态数据框。任何建议将不胜感激。这是我的代码。在第 72 行附近,我可以使用帮助。在保持这个功能的同时,我尽可能地保留了它,它是一个大型程序,但这是我迄今为止最大的问题。谢谢你
def main():
if __name__ == "__main__":
import pandas as pd
import numpy as np
from tabulate import tabulate
def parks():
park_dict = {'Alaska': ['DENA', 'Denali National Park and Preserve', 'GAAR', 'Gates of the Arctic National Park', 'GLBA',
'Glacier Bay National Park', 'KATM', 'Katmai National Park and Preserve', 'KEFJ',
'Kenai Fjords National Park', 'KOVA', 'Kobuk Valley National Park', 'LACLk', 'Lake Clark National Park',
'WRST', 'Wrangell – St Elias National Park and Preserve'],
'American_Samoa': ['NSPA', 'National Park of American Samoa','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Arizona': ['GRCA', 'Grand Canyon National Park', 'PEFO', 'Petrified Forest National Park', 'SAGU',
'Saguaro National Park','.','.','.','.','.','.','.','.','.','.'],
'Arkansas': ['HOSP', 'Hot Springs National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'California': ['CHIS', 'Channel Islands National Park', 'DVNP', 'Death Valley National Park', 'JOTR',
'Joshua Tree National Park', 'KICA', 'Kings Canyon National Park', 'LAVO',
'Lassen Volcanic National Park', 'REDW', 'Redwood National Park', 'SEKI',
'Sequoia National Park', 'YOSE','Yosemite National Park'],
'Caolorado': ['BLCA', 'Black Canyon of the Gunnison National Park', 'GRSA',
'Great Sand Dunes National Park and Preserve', 'MEVE', 'Mesa Verde National Park',
'ROMO','Rocky Mountain National Park','.','.','.','.','.','.','.','.'],
'Florida': ['BISC', 'Biscayne National Park', 'DRTO', 'Dry Tortugas National Park', 'EVER',
'Everglades National Park','.','.','.','.','.','.','.','.','.','.'],
'Hawaii': ['HALE', 'Haleakala National Park', 'HAVO', 'Hawaii Volcanoes National Park','.','.','.','.','.','.','.','.','.','.','.','.'],
'Kentucky': ['MACA', 'Mammoth Cave National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Maine': ['ACAD', 'Acadia National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Michigan': ['ISRO', 'Isle Royale National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Minnesota': ['VOYA', 'Voyageurs National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Montana': ['GLAC', 'Glacier National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Nevada': ['GRBA', 'Great Basin National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'New_Mexico': ['CAVE', 'Carlsbad Caverns National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'North_Carolina': ['GRSM', 'Great Smoky Mountains National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'North_Dakota': ['THRO', 'Theodore Roosevelt National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Ohio': ['CUVA', 'Cuyahoga Valley National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Oregon': ['CRLA', 'Crater Lake National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'South_Carolina': ['COSW', 'Congaree National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'South_Dakota': ['BADL', 'Badlands National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Tennessee': ['GRSM', 'Great Smoky Mountains National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Texas': ['BIBE', 'Big Bend National Park', 'GUMO', 'Guadalupe Mountains National Park','','','','','','','','','','','',''],
'US_Virgin_Islands': ['VIIS', 'Virgin Islands National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Utah': ['ARCH', 'Arches National Park', 'BRCA', 'Bryce Canyon National Park', 'CANY',
'Canyonlands National Park', 'CARE', 'Capitol Reef National Park', 'ZION', 'Zion National Park','.','.','.','.','.','.'],
'Virginia': ['SHEN', 'Shenandoah National Park','.','.','.','.','.','.','.','.','.','.','.','.','.','.'],
'Washington': ['MORA ', 'Mount Rainier National Park ', 'NOCA', 'North Cascades National Park', 'OLYM',
'Olympic National Park','.','.','.','.','.','.','.','.','.','.'],
'Wyoming': ['GRTE', 'Grand Teton National Park', 'YELL', 'Yellowstone National Park','.','.','.','.','.','.','.','.','.','.','.','.']}
df = pd.DataFrame(park_dict)
df.index = np.arange(1, len(df) + 1)
#print(tabulate(df, headers='keys', tablefmt='simple'))
return''
def choose_state():
state_list = [['AK', 'Alaska', 'AS', 'American Samoa', 'AZ', 'Arizona', 'AR', 'Arkansas'],
['CA', 'California', 'CO', 'Colorado', 'FL', 'Florida', 'HI', 'Hawaii'],
['KY', 'Kentucky', 'ME', 'Maine', 'MI', 'Michigan', 'MN', 'Minnesota'],
['MT', 'Montana', 'NV', 'Nevada', 'NM', 'New Mexico', 'NC', 'North Carolina'],
['ND', 'North Dakota', 'OH', 'Ohio', 'OR', 'Oregon', 'SC', 'South Carolina'],
['SD', 'South Dakota', 'TN', 'Tennessee', 'TX', 'Texas', 'USVI', 'US Vergin Islands'],
['UT', 'Utah', 'VA', 'Virginia', 'WA', 'Washington', 'WY', 'Wyoming']]
statedf = pd.DataFrame(state_list, columns=['Abbr', 'State', 'Abbr', 'State', 'Abbr', 'State', 'Abbr', 'State'])
print(tabulate(statedf, headers='keys', tablefmt='simple', showindex=False))
while True:
print('\nEnter the abreviation for the state you will visit\nR - Return tp previous menu\nQ - Quit')
try:
entry = str(input('\n').upper())
if not entry.isalpha():
print('please enter letters only.')
choose_state()
'''
# if entry == (state abbr) in state_list, then take the full name of the state and look in (park_dict) and display the correct column)
'''
print(tabulate(park_dict, headers='keys', tablefmt='simple')) # print correct column from park_dict
elif entry == str('R'):
choose_state()
elif entry == str('Q'):
print('Have a nice day.')
exit()
else:
print('please enter 2 letter state abreviation.')
except ValueError:
print('Invalid entry')
choose_state()
break
return ''
def main_menu():
print('Select choice from menu:\n\n'
'1 - not ready\n'
'2 - Select state and National Park you are visiting\n'
'3 - Quit')
while True:
try:
menu_choice = int(input('\n'))
if menu_choice == int(1):
print('ok')
exit()
elif menu_choice == int(2):
choose_state()
break
elif menu_choice == int(3):
print('Exiting program')
exit()
else:
print('Value not recognized.')
exit()
except ValueError:
print('Invalid entry, please enter 1,2, or 3.')
main_menu()
return ''
print(main_menu())
主要的()
更新:我按照下面的 MashodRana 建议更改了我的代码,它确实有助于清理它,但它工作不正确。我不断收到属性错误。我打算把字典当作 csv 文件来帮助清理它,但我认为它应该可以工作。
这些是错误: raise AttributeError(f"module 'pandas' has no attribute '{name}'") AttributeError: module 'pandas' has no attribute 'tabulate'
import pandas as pd
import numpy as np
from tabulate import tabulate
import csv
park_dict = {
'Alaska': ['DENA', 'Denali National Park and Preserve', 'GAAR', 'Gates of the Arctic National Park', 'GLBA',
'Glacier Bay National Park', 'KATM', 'Katmai National Park and Preserve', 'KEFJ',
'Kenai Fjords National Park', 'KOVA', 'Kobuk Valley National Park', 'LACLk',
'Lake Clark National Park',
'WRST', 'Wrangell – St Elias National Park and Preserve'],
'American_Samoa': ['NSPA', 'National Park of American Samoa', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.', '.', '.'],
'Arizona': ['GRCA', 'Grand Canyon National Park', 'PEFO', 'Petrified Forest National Park', 'SAGU',
'Saguaro National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
'Arkansas': ['HOSP', 'Hot Springs National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'California': ['CHIS', 'Channel Islands National Park', 'DVNP', 'Death Valley National Park', 'JOTR',
'Joshua Tree National Park', 'KICA', 'Kings Canyon National Park', 'LAVO',
'Lassen Volcanic National Park', 'REDW', 'Redwood National Park', 'SEKI',
'Sequoia National Park', 'YOSE', 'Yosemite National Park'],
'Colorado': ['BLCA', 'Black Canyon of the Gunnison National Park', 'GRSA',
'Great Sand Dunes National Park and Preserve', 'MEVE', 'Mesa Verde National Park',
'ROMO', 'Rocky Mountain National Park', '.', '.', '.', '.', '.', '.', '.', '.'],
'Florida': ['BISC', 'Biscayne National Park', 'DRTO', 'Dry Tortugas National Park', 'EVER',
'Everglades National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
'Hawaii': ['HALE', 'Haleakala National Park', 'HAVO', 'Hawaii Volcanoes National Park', '.', '.', '.', '.', '.',
'.', '.', '.', '.', '.', '.', '.'],
'Kentucky': ['MACA', 'Mammoth Cave National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'Maine': ['ACAD', 'Acadia National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
'Michigan': ['ISRO', 'Isle Royale National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'Minnesota': ['VOYA', 'Voyageurs National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'Montana': ['GLAC', 'Glacier National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.'],
'Nevada': ['GRBA', 'Great Basin National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.'],
'New_Mexico': ['CAVE', 'Carlsbad Caverns National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.', '.'],
'North_Carolina': ['GRSM', 'Great Smoky Mountains National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.', '.', '.', '.'],
'North_Dakota': ['THRO', 'Theodore Roosevelt National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.', '.', '.'],
'Ohio': ['CUVA', 'Cuyahoga Valley National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'Oregon': ['CRLA', 'Crater Lake National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.'],
'South_Carolina': ['COSW', 'Congaree National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'South_Dakota': ['BADL', 'Badlands National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'Tennessee': ['GRSM', 'Great Smoky Mountains National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.', '.', '.'],
'Texas': ['BIBE', 'Big Bend National Park', 'GUMO', 'Guadalupe Mountains National Park', '', '', '', '', '', '',
'', '', '', '', '', ''],
'US_Virgin_Islands': ['VIIS', 'Virgin Islands National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.', '.', '.'],
'Utah': ['ARCH', 'Arches National Park', 'BRCA', 'Bryce Canyon National Park', 'CANY',
'Canyonlands National Park', 'CARE', 'Capitol Reef National Park', 'ZION', 'Zion National Park', '.',
'.', '.', '.', '.', '.'],
'Virginia': ['SHEN', 'Shenandoah National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.',
'.', '.'],
'Washington': ['MORA ', 'Mount Rainier National Park ', 'NOCA', 'North Cascades National Park', 'OLYM',
'Olympic National Park', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
'Wyoming': ['GRTE', 'Grand Teton National Park', 'YELL', 'Yellowstone National Park', '.', '.', '.', '.', '.',
'.', '.', '.', '.', '.', '.', '.']}
pdf = pd.DataFrame(park_dict)
pdf.index = np.arange(1, len(pdf) + 1)
#print(tabulate(pdf, headers='keys', tablefmt='simple'))
pdf.to_csv(r'park_dict.csv')
state_list = [['AK', 'Alaska', 'AS', 'American Samoa', 'AZ', 'Arizona', 'AR', 'Arkansas'],
['CA', 'California', 'CO', 'Colorado', 'FL', 'Florida', 'HI', 'Hawaii'],
['KY', 'Kentucky', 'ME', 'Maine', 'MI', 'Michigan', 'MN', 'Minnesota'],
['MT', 'Montana', 'NV', 'Nevada', 'NM', 'New Mexico', 'NC', 'North Carolina'],
['ND', 'North Dakota', 'OH', 'Ohio', 'OR', 'Oregon', 'SC', 'South Carolina'],
['SD', 'South Dakota', 'TN', 'Tennessee', 'TX', 'Texas', 'USVI', 'US Virgin Islands'],
['UT', 'Utah', 'VA', 'Virginia', 'WA', 'Washington', 'WY', 'Wyoming']]
sdf = pd.DataFrame(state_list, columns=['Abbr', 'State', 'Abbr', 'State', 'Abbr', 'State', 'Abbr', 'State'])
sdf = pd.DataFrame({'abbr': sdf['Abbr'].values.flatten(), 'state': sdf['State'].values.flatten()})
#sdf.to_csv(r'state_dict.csv')
#print(tabulate(sdf, headers='keys', tablefmt='simple', showindex=False))
def trail_finder():
with open('AllTrails data.csv', 'r') as f:
all_park_data = csv.reader(f)
all_park_info = list(all_park_data)
# print('\n'.join(' '.join(elems) for elems in all_park_info)) #just to verify data
f.close()
def main():
def choose_destination():
print(tabulate(sdf, headers='keys', tablefmt='simple', showindex=False))
# user input
entry = str(input('Enter the abreviation for the state you will visit:\n').upper())
while True:
try:
val = sdf[sdf['abbr'] == entry]
state_name = val.values.flatten()[1]
print(pd.tabulate(pdf))
ndf = {state_name: pdf[state_name].values}
print(tabulate(ndf, headers='keys', tablefmt='simple'))
# error checking
if not entry.isalpha():
print('please enter letters only.')
else:
print('please enter 2 letter state abreviation.')
except ValueError:
print('Invalid entry')
break
return ''
def fitness_menu():
print('1 - Determine fitness level\n2 - proceed to Trail Finder\n3 - Quit')
while True:
try:
menu_choice = int(input('\n'))
if menu_choice == int(1):
print('FIXME- build fitness level code')
break
elif menu_choice == int(2):
choose_destination()
break
elif menu_choice == int(3):
print('Exiting program')
exit()
else:
print('Invalid entry, please enter 1, 2, or 3.')
exit()
except ValueError:
print(ValueError)
exit()
return ''
def entrance_menu():
print('Select choice from menu:\n\n'
'1 - To use fitness calculator to determine fitness level(optional) \n'
'2 - To choose destination\n'
'3 - To Quit')
while True:
try:
menu_choice = int(input('\n'))
if menu_choice == int(1):
fitness_menu()
break
elif menu_choice == int(2):
choose_destination()
break
elif menu_choice == int(3):
print('Exiting program')
exit()
else:
print('Invalid entry, please enter 1, 2, or 3.')
entrance_menu()
except ValueError:
print(ValueError)
exit()
return ''
entrance_menu()
main()
解决方案
您可以通过以下方式完成您的任务:
将所有状态和缩写组合成一列
sdf = pd.DataFrame({'abbr':statedf['Abbr'].values.flatten(),'state':statedf['State'].values.flatten()})
在sdf (状态数据框)中搜索缩写并提取相应的完整形式
val = sdf[sdf['abbr']==entry]
state_name = val.values.flatten()[1]
最后显示来自pdf(公园数据框)的州名对应的公园
ndf = {state_name:pdf[state_name].values}
print(tabulate(ndf, headers='keys', tablefmt='simple', showindex=False))
注意: 请将您的公园和州保存为 CSV 文件。然后将它们加载到您的程序中。不要将不同的列用于相同类型的值,例如“状态”和“缩写”。如果您愿意,可以通过多种方式改进代码。
推荐阅读
- python-3.x - 如何从回溯中提取最后一条消息并保留原始堆栈跟踪
- kotlin - java.lang.LinkageError:方法 void GameHistoryViewModel.a() 覆盖类 Landroidx/lifecycle/ViewModel 中的最终方法;出现在 base.apk 中)
- python - 使用 psutil.Process.memory_info 内存使用与 Pandas.memory_usage 不同
- android - 错误:找不到 com.android.location.build:gradle:3.5.0
- php - 如何在 laravel 中创建一个全局变量
- c++ - 指向成员复合的指针
- hyperlink - 无法使用 Protractor 在“IBM Navigator for i”浏览器中单击 wpsToolBarLink 链接
- windows - 如何在 Powershell 中为特定命令设置别名?
- c# - 在一个命名空间下的多个子文件夹中重新组合 razor 组件 - Blazor
- azure - 如何从 Blob 存储下载文件