【问题标题】:comparing columns pandas python比较列熊猫python
【发布时间】:2014-03-31 12:39:58
【问题描述】:

我有一个 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

有什么想法可以实现我的目标吗?

【问题讨论】:

    标签: python csv numpy pandas multiple-columns


    【解决方案1】:

    您的代码的问题是 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)

    【讨论】:

    • 这很有效,谢谢。请注意,在我尝试了更简单的阅读方法后它停止工作
    • 是的,我是这么认为的。我只是想让你知道你可以使用 pandas 直接从 csv 中读取数据。希望对您有所帮助。
    【解决方案2】:

    关于我如何处理 csv 文件的示例

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

    请注意,您必须遍历 infile 中的每一行。同样,您的 df 是文件行的集合,您必须遍历它们以获取每一行以比较列。

    【讨论】:

    • 好的,那我该如何应用它呢?
    • @kegewe 现在你已经有了行,你应该有一个列值列表,现在可以进行比较。打印该行,您将明白我的意思。接下来是每列值的比较。
    【解决方案3】:

    基本上,您必须记住布尔值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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 2017-12-23
      • 2019-09-17
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      相关资源
      最近更新 更多