我正在尝试阅读马赛道信息的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)
答案 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
因此,系列会同时True
和False
。
答案 1 :(得分:0)
问题在于
if df.ix[2] == 1
。表达式df.ix[2] == 1
将返回pd.Series
个真值。通过在前面添加if
,您尝试将一系列值评估为True
或False
,这就是抛出错误。
有几种方法可以生成一个值为210
且索引为df.ix[2] == 1
这是一种方式
pd.Series(210, df.index[df.ix[2] == 1])