keg*_*ewe 5 python csv numpy multiple-columns pandas
我有一个包含5列和多行的csv文件,格式如下:
BAL 27 DEN 49 2013-09-05T20:30:00
Run Code Online (Sandbox Code Playgroud)
我想比较2个分数并将获胜者的名字作为第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]
Run Code Online (Sandbox Code Playgroud)
我得到了一个 ValueError: The truth value of a Series is ambiguous
我有什么想法可以实现我的目标?
基本上,您必须记住布尔值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")})
Run Code Online (Sandbox Code Playgroud)
创建一个新列,并将guest虚拟机名称分配给guest分数大于主分数的每一行(请注意,"wins"列中的其他行在第一次分配后将为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
Run Code Online (Sandbox Code Playgroud)
您的代码的问题是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
Run Code Online (Sandbox Code Playgroud)
然后你可以做print df或print df[6]。
您还可以更轻松地完成阅读部分:df = read_csv('games.csv', delim_whitespace=True,header=None)
| 归档时间: |
|
| 查看次数: |
4673 次 |
| 最近记录: |