【问题标题】:Reading excel values in python from user input从用户输入中读取python中的excel值
【发布时间】:2021-10-14 19:17:22
【问题描述】:

我是这个社区的新手,目前正在学习 Python。对于我的第一个小项目,我想要求用户输入(元素周期表中的元素)并打印相应的属性,例如名称、数量和质量。

import pandas as pd
df = pd.read_excel(r'path\excelfile.xlsx')
    
Symbol = input('Input Symbol: ')

try:
    value = df.index[df['Symbol']== Symbol].tolist()[0]
    print(f'properties of {Symbol} are: ')
    print("Element Name: ",df['Atomic_name'][value])
    print("Element Number : ",df['Atomic_number'][value])
    print("Element Mass  : ",df['Atomic_weight'][value], "g/mol")
except IndexError:
    print('Symbol not found')

对于 excel 文件,我使用的是以下文件:[https://easyupload.io/qrl7yu][1]

坦率地说,只有当您的输入为“H”时,它才适用于第一个符号,从而导致以下输出:

Input Symbol: H
properties of H are:
Element Name  :  Hydrogen
Element Number:  1
Element Mass  :  1.01 g/mol

这正是我想要的,但是当我尝试来自同一列“符号”的符号时,它不起作用。我想让它适用于所有符号。如何定义输入的所有符号都来自同一列?我认为这与我定义 value = 的第 7 行有关。

维克斯 [1]:https://easyupload.io/qrl7yu

【问题讨论】:

    标签: python python-3.x excel input printing


    【解决方案1】:

    我认为您的代码运行良好,问题在于符号数据包含额外的空格。您可以先在 excel 上使用 trim() 函数来清理空格,然后重试您的代码。

    例如,您将在下面看到引号和 Cr 之间的空格 这会导致您的数据与用户的输入不匹配 'Cr'

    【讨论】:

      【解决方案2】:

      也许这对你有用:

      import pandas as pd
      
      df = pd.read_excel('LoCE.xlsx')
      
      user_input = input('Input Symbol: ')
      
      mask = df.loc[:, 'Symbol'] == user_input
      
      df_mask = df.loc[mask, :]
      
      print(df_mask)
      

      【讨论】:

      • 不完全是我想要的。问题是我的输入必须来自同一列(符号)。由于某种原因,它只识别列的第一个元素。
      • 您的输入来自用户。或者(更有可能)我不知道你想说什么;-)
      • 对不起,我表述错了。我想说的是,如果我运行代码并且它要求我输入一个元素符号,例如(镁)。我希望代码能够识别 excel 符号列中的符号,然后打印相应的属性。这些属性位于同一行。使用我的代码,它只识别第一个元素 (H) 而没有其他元素。如何定义 Python 必须从我的符号列中的输入中搜索符号?
      • 是否只是我的示例的输出类型不符合您的要求,因为如果您在我提供的程序中输入一个符号,它会返回您正在寻找的内容(相应的属性)。在我的示例中,我通过 try 保留了所有打印语句和输入检查器的漂亮格式,但可以添加。
      • 你是对的!非常感谢!
      【解决方案3】:

      如果将 Symbol 列更改为 str 类型, 然后使用 df.str.contains 进行查询:

      df['Symbol']=df['Symbol'].astype(str)
      df[df['Symbol'].str.contains("Li")]
      

      【讨论】:

      • 感谢您的评论!但是,我不想打印所有列标题,我只想打印列中的信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 2014-08-18
      • 2016-07-10
      • 2020-05-24
      相关资源
      最近更新 更多