2014-02-27 261 views
5

我有5列和多行以以下格式的CSV文件:比較列大熊貓蟒蛇

BAL 27 DEN 49 2013-09-05T20:30:00 

我要比較的分數,回到勝利者的名稱作爲第6列

我嘗試這樣做:

from pandas import read_csv 
Games = open("games.csv","rb") 
df = read_csv(Games, header=None) 
#print df 
#print df[0] 

if df[3] > df[1]: 
    print df[2] 
else: 
    print df[0] 

我正在一個ValueError: The truth value of a Series is ambiguous

任何想法如何能夠實現我的目標?

回答

3

您的代碼的問題是df[3] > df[1]返回布爾值的pandas.Series,並且消息說The truth value of a Series is ambiguous

試試這個:

df[6] = df[0] #sets default value 
df.loc[df[3]>df[1],6] = df[2] #change when second wins 

然後,你可以做print dfprint df[6]

你也可以做閱讀部分更容易:df = read_csv('games.csv', delim_whitespace=True,header=None)

+0

這工作謝謝。請注意,在我嘗試更簡單的閱讀方法後,它停止工作 – kegewe

+0

是的,我認爲。我只是想讓你知道,你可以使用熊貓直接從csv讀取。希望能幫助到你。 –

0

一個例子,我怎麼處理的csv文件,你必須遍歷infile中的每一行

ifile = open('myinputfile', 'rb') 
infile = csv.DictReader(ifile) 
for row in infile: 
    process-row(row) 

通知。同樣,你的df是文件行的集合,你必須遍歷它們才能得到每一行以便比較列。

+0

好的,那麼我怎麼會適用於我的情況呢? – kegewe

+1

@kegewe現在你已經有了行,你應該有一個列值的列表,現在可以對它們進行比較。打印行,你會明白我的意思。每列值的比較如下。 – sabbahillel

6

基本上,你必須記住,布爾df["home"] > df["guest"]是一個向量 - 你可以利用這個優勢爲每個行分配主隊名稱,其中向量爲True。你可以嘗試這樣的事:

模擬一些數據:

In [22]: df = pandas.DataFrame({"home":[10,13,7,24,17], 
"guest":[13, 7, 7, 30, 17], 
"home_name":list("ABCDE"), 
"guest_name":list("abcde")}) 

創建一個新列,客人姓名分配到具有來賓的每一行成績比主場得分的情況(注意,其他「優勝者」列中的行在第一次分配後將是NaN,並且將逐漸填充):

In [23]: df.loc[df["guest"]>df["home"], "winner"] = df["guest_name"] 

In [24]: df.loc[df["guest"]<df["home"], "winner"] = df["home_name"] 

In [25]: df.loc[df["guest"]==df["home"], "winner"] = "tie" 

In [26]: df 
Out[26]: 
    home_name guest_name home guest winner 
0   A   a 10  13  a 
1   B   b 13  7  B 
2   C   c  7  7 tie 
3   D   d 24  30  d 
4   E   e 17  17 tie