我正在尝试使用熊猫创建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
输入值时,它将打印该行中的所有列。
答案 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()更快。