2016-08-17 5 views
1

インデックス化Python dataframeに問題があります。私はそれをループで埋めるデータフレームを持っています。私はこのようにそれを簡素化:pythonデータフレーム内のすべての行のインデックスがゼロ

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[]に基づいて、特定の行にアクセスすることはできませんです。どのように私は問題を解決し、通常のインデックスの列を取得することができます誰も考えている?

答えて

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) 
+0

実際、私はデータフレームを作成するより良い方法を模索していますが、行のリストを作ることが何を意味するのか分かりません。 – ga97rasl

+0

私のアップデートを例文 –

+0

ありがとうございました。以前より速く動作します! – ga97rasl

2

あなたの連結にignore_indexパラメータを使用することもできます。私はより良いが、最初の塗りつぶしだと思う

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 
+0

ありがとう、それは今動作します! – ga97rasl

0

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

これは私に次のような結果になりますlistsを値で使用し、次にDataFrameコンストラクタを1回使用します。

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 
+0

ありがとう、私はそれを変更しました。 – ga97rasl

関連する問題