python数据帧中所有行的零索引

时间:2016-08-17 09:55:11

标签: python python-3.x pandas indexing dataframe

我有索引python dataframe的问题。我有数据框,我用循环填充它。我这样简化了:

d = pd.DataFrame(columns=['img', 'time', 'key'])
for i in range(5):
    image = i
    timepoint = i+1
    key = i+2
    temp = pd.DataFrame({'img':[image], 'timepoint':[timepoint], 'key': [key]})
    d = pd.concat([d, temp])

问题是因为它显示所有行的0和索引,我无法访问基于.loc[]的特定行。有没有人知道如何解决问题并获得正常的索引列?

3 个答案:

答案 0 :(得分:3)

您可能希望在串联中使用ignore_index参数:

d = pd.concat([d, temp], ignore_index=True)

这给了我以下结果:

   img  key time  timepoint
0  0.0  2.0  NaN        1.0
1  1.0  3.0  NaN        2.0
2  2.0  4.0  NaN        3.0
3  3.0  5.0  NaN        4.0
4  4.0  6.0  NaN        5.0

答案 1 :(得分:2)

d = d.reset_index(drop=True)

PS:最好先制作一个行列表,然后将其转换为数据帧,计算成本要低得多,它会立即成为一个好的索引。

此列表可以是与DataFrame init中的列组合的列表列表,也可以是列名为键的字典列表。在你的情况下:

list_of_dicts = []
for i in range(5):
    new_row = {'img': i, 'time': i+1, 'key': i+2}
    list_of_dicts.append(new_row)
d = pd.DataFrame(new_row)

答案 2 :(得分:0)

我认为最好先按值填充lists,然后再使用DataFrame构造函数:

image, timepoint, key = [],[],[]
for i in range(5):
    image.append(i)
    timepoint.append(i+1)
    key.append(i+2)

d = pd.DataFrame({'img':image, 'time':timepoint, 'key': key})
print (d)
   img  key  time
0    0    2     1
1    1    3     2
2    2    4     3
3    3    5     4
4    4    6     5