【问题标题】:How can I use pandas to output a specific column based on a user inputting another column?如何根据用户输入另一列使用 pandas 输出特定列?
【发布时间】:2019-01-24 01:35:31
【问题描述】:

我正在尝试使用pandas 创建一个python 脚本,它会提示用户输入'Name'(or column 0) 列中的值,然后打印'Location'(or column 9) 列中的值。

到目前为止,我有以下内容,但它会打印行中的所有列。如何让它打印特定的列?

import pandas as pd

df = pd.read_csv("Servers.csv")
user_input = raw_input("Enter server name: ")

for index, row in df.iterrows():
    if row[0] == user_input:
        print row

当我从第一列 labled 'Name' 输入一个值时,我希望它只打印行 labled 'Location' 的第 9 列。

目前,当我从第一列 Name 输入值时,它会打印行中的所有列。

【问题讨论】:

    标签: python pandas csv input


    【解决方案1】:

    此处不要使用循环,构造一个系列,然后通过at 查询该系列。这假设您没有重复的名称。

    df = pd.read_csv("Servers.csv")
    series_map = df.set_index('Name')['Location']
    user_input = raw_input("Enter server name: ")
    
    print series_map.at[user_input]
    

    你的循环方法的问题是你没有索引row,你可以使用:

    print row[9]
    

    【讨论】:

    • 谢谢jpp!那工作得很好。抱歉,我是新手,还不能投票。 :(
    【解决方案2】:

    添加行 print(df[df['Name'] == user_input].loc[:,'Location'].values[0]) 应该可以解决问题。

    这是一个包含 3 行和列的数据框的简单示例:

    d = {'Name': ['John', 'Laura', 'Sam'], 
         'Food': ['Sushi', 'Spaghetti', 'Sandwich'], 
         'Location': ['Houston', 'San Francisco', 'Hawaii']}
    
    df = pd.DataFrame(data = d)
    
        Name    Food        Location
    0   John    Sushi       Houston
    1   Laura   Spaghetti   San Francisco
    2   Sam     Sandwich    Hawaii
    

    如果是user_input = 'John',我们会这样打印出他的位置:

    print(df[df['Name'] == user_input].loc[:,'Location'].values[0])

    这将输出字符串Houston

    这种方法避免了循环,并且应该比使用 .iterrows() 更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多