particles.location not returning proper frame values
You are using the reference to the location of the particle, hence they are all the value of the last frame, fix by using a copy of the location in your list.

p_position.append([frame, particles[0].location.copy()])