#python #pandas #dataframe #csv
Вопрос:
Я извлек идентификатор пользователя из shop_ids как фрейм данных pandas из базы данных с помощью SQL-запроса.
user_id shop_ids
0 022221205 541
1 023093087 5088,4460,4460,4460,4460,4460,4460,4460,5090
2 023096023 2053,2053,2053,2053,2053,2053,2053,2053,2053,1...
3 023096446 4339,4339,3966,4339,4339
4 023098684 5004,3604,5004,5749,5004
Я пытаюсь записать этот фрейм данных в csv с помощью:
df.to_csv('users_ordered_shops.csv')
В итоге я получаю csv, объединяющий идентификаторы магазинов в один номер как таковой:
user_id shop_ids
0 22221205 541
1 23093087 508,844,604,460,446,000,000,000,000,000,000,000
2 23096023 2,053,205,320,532,050,000,000,000,000,000,000,000,000,000,000,000,000
3 23096446 43,394,339,396,643,300,000
4 23098684 50,043,604,500,457,400,000
Значения индекса 2
являются:
print(df.iloc[2].shop_ids)
2053,2053,2053,2053,2053,2053,2053,2053,2053,1294,1294,2053,1922
Ожидаемый результат-файл csv со всеми сохраненными идентификаторами shop_id в одном столбце или в разных столбцах, таких как:
user_id shop_ids
0 022221205 541
1 023093087 5088,4460,4460,4460,4460,4460,4460,4460,5090
2 023096023 2053,2053,2053,2053,2053,2053,2053,2053,2053,1294,1294,2053,1922
3 023096446 4339,4339,3966,4339,4339
4 023098684 5004,3604,5004,5749,5004
Какие-нибудь советы о том, как получить идентификаторы магазинов без слияния при записи в csv-файл? Я попытался преобразовать столбец shop_ids с помощью astype()
в int
и str
, что привело к тому же результату.
Комментарии:
1. Пожалуйста, избегайте изображений, заменяйте их данными в виде обычного текста, чтобы их могли использовать другие люди. Спасибо.
2. Спасибо @Corralien. Просто отредактировал изображения в текст.
3. Каков ваш ожидаемый результат? Например, для индекса 2
4. Ожидаемым результатом будет файл csv, который не потеряет идентификаторы магазинов и не объединит идентификаторы магазинов в одно длинное число при преобразовании в csv.
5. Вам нужно показать, какой код вы используете. Я не могу понять, как вы меняете 4-значные числа на 3-значные. Похоже, вы объединяете числовые строки или берете строку и удаляете запятые вручную.
Ответ №1:
Обновить
Чтобы получить по одному магазину на колонку (и удалить дубликаты), вы можете использовать:
pd.concat([df['user_id'],
df['shop_ids'].apply(lambda x: sorted(set(x.split(','))))
.apply(pd.Series)],
axis=1).to_csv('users_ordered_shops.csv', index=False)
Измените разделитель. Попробуй:
df.to_csv('users_ordered_shops.csv', sep=';')
Или измените стратегию цитирования:
import csv
df.to_csv('users_ordered_shops.csv', quoting=csv.QUOTE_NONNUMERIC)
Комментарии:
1. Изменение разделителя разделяет большинство значений, но объединяет значение user_id и значение first shop_id вместе. Изменение стратегии котировки не приводит к изменению результатов.
2. Попробуй:
pd.concat([df['user_id'], df['shop_ids'].apply(lambda x: sorted(set(x.split(',')))).apply(pd.Series)], axis=1).to_csv('data.csv', index=False)
3. @ Corralien это сработало для меня! Он получил уникальные значения в разных столбцах. Не могли бы вы добавить это в свой ответ, чтобы я мог его принять.
4. @afs. Я обновил свой ответ. Спасибо 🙂
5. Здорово. спасибо за помощь!