使用Pandas计算一组单元格的值

时间:2016-12-19 17:34:16

标签: python python-2.7 python-3.x csv pandas

我正在尝试阅读马赛道信息的csv文件。

我正在尝试为第1场中的职位(第3栏)编码字段qpts(第210栏)的最大值。我花了几天时间研究这个问题,并且在网络或youtube上找不到明确的答案。

当我运行下面的代码时,我得到“系列的真值是模糊的......”

import pandas as pd
import numpy as np
pd.set_option('display.max_columns',100)

df = pd.read_csv('track.csv', header=None, na_values=['.'])

index = list(range(0,200,1))
columns = list(range(0,1484,1))

if df.ix[2]== 1:
    qpts = (df.max([210]))
    print (qpts)

2 个答案:

答案 0 :(得分:0)

此处df.ix[2]== 1将返回一个系列。您需要使用.any().all()等函数将系列组合成一个值,您可以对其进行真值陈述。例如,

import pandas as pd
import numpy as np
pd.set_option('display.max_columns',100)

df = pd.read_csv('track.csv', header=None, na_values=['.'])

index = list(range(0,200,1))
columns = list(range(0,1484,1))

if (df.ix[2]== 1).any(axis=1):
    qpts = (df.max([210]))
    print (qpts)

在上面的例子中,我们检查是否有任何Series元素等于1.如果是,那么将实现if语句。如果我们不这样做,那么我们可能会遇到如下情况:

print(df)

Out[1]:

   1    3
   2    7
   3    1
   4    5
   5    6

print(df.ix[2]== 1)

Out[2]:

   1    False
   2    False
   3    True
   4    False
   5    False

因此,系列会同时TrueFalse

答案 1 :(得分:0)

问题在于

if df.ix[2] == 1。表达式df.ix[2] == 1将返回pd.Series个真值。通过在前面添加if,您尝试将一系列值评估为TrueFalse,这就是抛出错误。

有几种方法可以生成一个值为210且索引为df.ix[2] == 1

的系列

这是一种方式

pd.Series(210, df.index[df.ix[2] == 1])