В настоящее время я работаю с базой данных и пытаюсь отсортировать строки с помощью панд. У меня есть столбец с именем 'sessionkey', который относится к сеансу. Таким образом, каждая строка может быть назначена для сеанса. Я пытался разделить данные на эти сессии.
Кроме того, могут быть дублированные строки. Я пытался удалить их с помощью функции drop_duplicates из панд.
df = pd.read_csv((path_of_data+'part-00000-9d3e32a7-87f8-4218-bed1-e30855ce6f0c-c000.csv'), keep_default_na=False, engine='python')
tmp = df['sessionkey'].values #I want to split data into different sessions
tmp = np.unique(tmp)
df.set_index('sessionkey', inplace=True)
watching = df.loc[tmp[10]].drop_duplicates(keep='first') #here I pick one example
print(watching.sort_values(by =['eventTimestamp', 'eventClickSequenz']))
print(watching.info())
Я бы подумал, что это работает нормально, но когда я попытался проверить свои результаты, распечатав свой разделенный фрейм данных, вывод мне показался очень странным. Например, я напечатал длину Dataframe, это говорит о 38 строках x 4 столбцах. Но когда я печатаю тот же самый Dataframe, там явно больше 38 строк, и в нем все еще есть дубликаты.
Я уже пытался разделить данные, используя уникальные индексы:
comparison = pd.DataFrame()
for index, item in enumerate(df['sessionkey'].values):
if item==tmp: comparison = comparison.append(df.iloc[index])
comparison.drop_duplicates(keep='first', inplace=True)
print(comparison.sort_values( by = ['eventTimestamp']))
Но проблема все та же.
Выходные данные также соответствуют шаблону. Допустим, у нас есть 38 записей. Затем pandas возвращает мне первые 1-37 записей, а затем добавляет 2-38 записей. Таким образом, последний исключается, а затем весь список перемещается и печатается снова.
Когда я возвращаю числовые значения, есть только 38 разных строк. Так это проблема функции печати из панд? Есть ли ошибка в моем коде? Есть ли у панд проблемы с неуникальными индексами?
EDIT:
Хорошо, я понял, в чем проблема. Я хотел посмотреть на длинный фрейм данных, поэтому я использовал:
pd.set_option('display.max_rows', -1)
Теперь мы можем использовать некоторые примеры данных:
data = np.array([[119, 0], [119, 1], [119, 2]])
columns = ['sessionkey', 'event']
df = pd.DataFrame(data, columns = columns)
print(df)
Напечатано, теперь это выглядит так:
sessionkey event
0 119 0
1 119 1
1 119 1
2 119 2
Хотя я ожидал, что это будет выглядеть так:
sessionkey event
0 119 0
1 119 1
2 119 2
Я думал, что мой Dataframe имеет неправильную форму, но это не так.
Таким образом, событие в середине печатается вдвое. Это ошибка или вывод с намерением?