Панды; Python - VLookup - PullRequest
       1

Панды; Python - VLookup

1 голос
/ 09 июля 2020

Я впервые публикую вопрос, так что не волнуйтесь, если я не знаю, как задавать вопросы при переполнении стека. * на моем сайд-проекте. Я хочу иметь возможность сравнивать вводимые пользователем данные с файлом базы данных .xlsx, который был импортирован pandas.

Я хочу сравнить вводимые пользователем данные с базой данных column ['Component'], если этот компонент присутствует , он получит свои свойства, связанные с этим компонентом.


comp_loc = r'C:\Users\ayubi\Documents\Python Files\Chemical_Database.xlsx'
data = pd.read_excel(comp_loc)

print(data)

LK = input('What is the Light Key?: ') #Answer should be Benzene in this case

if LK == data['Component'].any():
    Tcrit = data['TC, (K)']
    Pcrit = data['PC, (bar)']
    A = data['A']
    B = data['B']
    C = data['C']
    D = data['D']
else:
    print('False')

Результаты

   Component  TC, (K)  PC, (bar)      A      B      C      D
0  Benzene     562.2       48.9 -6.983  1.332 -2.629 -3.333
1   Toluene    591.8       41.0 -7.286  1.381 -2.834 -2.792

What is the Light Key?: Benzene
False

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

Я очень признателен за ваше помогите!

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Это можно сделать, используя индексы и аксессор df.loc в pandas:

# set index to Component column for convenience
data = data.set_index('Component')
LK = input('What is the Light Key?: ') #Answer should be Benzene in this case

# check if your lookup is in the index
if LK in data.index:
    # grab the row by the index using .loc
    row = data.loc[LK]
    # if the column name has spaces, you need to access as key
    Tcrit = row['TC, (K)']
    Pcrit = row['PC, (bar)']
    # if the column name doesn't have a space, you can access as attribute
    A = row.A
    B = row.B
    C = row.C
    D = row.D
else:
    print('False')
0 голосов
/ 09 июля 2020

Это отличный случай для Index. Установите 'Component' в индекс, а затем вы можете использовать очень быстрый вызов loc для поиска данных. Вместо if-else используйте try-except, поскольку KeyError сообщит вам, что LK не существует, без необходимости более медленной проверки первой проверки того, находится ли он в индексе.

Я также очень Предлагаем вам сохранить значения как одну серию, а не перемещаться в виде 6 разных варибалов. Получить доступ к каждому элементу просто по индексу серии, то есть по серии ['A'].

df = df.set_index('Component')

def grab_data(df, LK):
    try:
        return df.loc[LK]
    except KeyError:
        return False

grab_data(df, 'Benzene')
#TC, (K)     562.200
#PC, (bar)    48.900
#A            -6.983
#B             1.332
#C            -2.629
#D            -3.333
#Name: Benzene, dtype: float64

grab_data(df, 'foo')
#False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...