通过pandas字符串索引迭代将它们变成了浮点数

时间:2016-02-24 17:10:24

标签: python pandas

我有一个csv文件:

 SID    done    good_ecg    good_gsr    good_resp   comment
    436     0   1   1   
    2411        1   1   1   
    3858        0   1   1   
    4517        0   1   1   117 min diff between files
    9458        1   0   1   ######### error in my script
    9754        0   1   1   trigger fehler

        #REF!               
        88.8888888889   

我在pandas数据框中加载它是这样的:

df = pandas.read_csv(f ,delimiter="\t", dtype="str", index_col='SID')

我想遍历索引并打印每个索引。但是当我尝试

for subj in df.index:
   print subj

我得到了

436.0
2411.0
...

现在每个数字的末尾都有'.0'。我做错了什么?

我也试过用iterrows()进行迭代并遇到同样的问题。

感谢您的帮助!

编辑:这是我正在使用的完整代码:

import pandas
def write(): 
   df = pandas.read_csv("overview.csv" ,delimiter="\t", dtype="str", index_col='SID')

   for subj in df.index: 
            print subj


write()

1 个答案:

答案 0 :(得分:1)

阿。 dtype参数不适用于index_col

>>> !cat sindex.csv
a,b,c
123,50,R
234,51,R
>>> df = pd.read_csv("sindex.csv", dtype="str", index_col="a")
>>> df
      b  c
a         
123  50  R
234  51  R
>>> df.index
Int64Index([123, 234], dtype='int64', name='a')

相反,在没有index_col的情况下阅读它(None实际上是默认设置,因此您根本不需要index_col=None,但此处我将是明确的)然后设置索引:

>>> df = pd.read_csv("sindex.csv", dtype="str", index_col=None)
>>> df = df.set_index("a")
>>> df
      b  c
a         
123  50  R
234  51  R
>>> df.index
Index(['123', '234'], dtype='object', name='a')

(我无法想到df.index会有dtype对象的情况,但是当你迭代它时你会得到整数,但你实际上并没有显示任何自包含的代码产生了这个问题。)