如何根据用户输入的另一列使用熊猫来输出特定的列?

时间:2019-01-24 01:35:32

标签: python pandas csv input

我正在尝试使用熊猫创建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 'Location'输入一个值时,我只希望它从行labled 'Name'打印第9列。

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

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

这是一个简单的示例,其中数据框包含3行和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()更快。