我有索引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[]
的特定行。有没有人知道如何解决问题并获得正常的索引列?
答案 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