Почему pandas.dataframe генерирует случайный порядок

#python #pandas

#python #pandas

Вопрос:

Почему

df = pd.DataFrame({user, points, timestr})

в

 import pandas as pd
import time
timestr = time.strftime("%Y-%m-%d %H:%M")

url_all_time = 'https://community.koodomobile.com/widget/pointsLeaderboard?period=allTimeamp;maxResults=20amp;excludeRoles='
data = pd.read_json(url_all_time)
user = data['name'][0]
points = data['points'][0]
df = pd.DataFrame({user, points, timestr})
# df = df.transpose()
df.to_csv('products.csv', mode='a', index=False, header=False, encoding='utf-8')
  

Генерирует результаты случайного порядка? Почему он не следует user, points, timestr? Иногда сначала идут имена, иногда время, иногда точки? Я не понял, как работает pd.df?

Комментарии:

1. Потому {user, points, timestr} что это a set , а set объекты имеют произвольный порядок. Если вам нужен тип контейнера, который сохраняет порядок, используйте список или кортеж.

2. В любом случае, чтобы сделать его не произвольным?

Ответ №1:

Код {user, points, timestr} создает один set из этих трех объектов. Объекты набора упорядочены произвольно, поэтому вы видите разные порядки при разных запусках. Чтобы сохранить порядок, используйте список или кортеж.

 # list
pd.DataFrame([user, points, timestr])
# tuple
pd.DataFrame((user, points, timestr))
  

Комментарии:

1. В итоге я сделал idata= (user, points, timestr) df = pd.DataFrame(idata)

2. Отлично. Это создает кортеж, который похож на второе решение в моем ответе.