读取数据帧时索引超出范围

时间:2014-06-19 20:12:43

标签: python pandas indexing

我有一个标签分隔文件,我正在尝试解析,为此我正在这样做:

我文件的标题:

chrom   coord   ref_base    var_base    A   C   G   T
17  26695663    G   A   1   0   1934    0
17  26695664    T   A   1   0   1   1935 

我的代码是:

counts = pd.read_csv(args.counts_file, sep='\t')
toto = counts[(counts['chrom'].astype(str) == "17") & (counts['coord'].astype(str) == "26695663")]
print toto["G"].values[0]

此函数返回所需的数字,即1934

现在当我尝试创建一个函数来接受从文件中读取数据帧的参数时,我写了这个函数

def get_foreground_counts(chrom, coord, counts, ref_base, var_base):

     foreground_counts = counts[(counts['chrom'] == chrom) & (counts['coord'] == coord)]

     foreground_ref_counts = foreground_counts[ref_base].values[0]

     foreground_var_counts = foreground_counts[var_base].values[0]

     return foreground_ref_counts, foreground_var_counts

我得到了这个错误,我想弄清楚但仍然无法理解为什么

Traceback (most recent call last):
  File "test.py", line 203, in <module>
    main(args)
  File "test.py", line 71, in main
    foreground_ref_counts, foreground_var_counts = get_foreground_counts(chrom, coord, counts, ref_base, var_base)
  File "test.py", line 137, in get_foreground_counts
    foreground_ref_counts = foreground_counts[ref_base].values[0]
IndexError: index out of bounds

知道为什么吗?

由于

更新

  • 当我尝试打印foreground_counts [ref_base] .values时,我得到了这个[]
  • 我传递给函数的是chrom(string),coord(string),counts(panda dataframe),ref_base(string),var_base(string))

1 个答案:

答案 0 :(得分:1)

在您的函数中,您的过滤器确实返回零行,这就是您收到错误的原因。您似乎忘记了函数第一行中的.astype(str)

您可以在调用函数之前强制转换列类型,也可以修改该行。如果您确实需要使用字符串类型,前者将是更好的方法,否则为什么不使用整数值进行比较?。