#python #pandas
#python #pandas
Вопрос:
Я постоянно сталкиваюсь с такой ситуацией, когда в процессе производства или разработки я возлюсь с фреймом данных, что-то исправляю, а затем должен написать для него unittest. Много раз было бы отстойно пытаться разработать некоторые соответствующие тестовые данные, и было бы намного быстрее, если бы производственные данные сбрасывали несколько строк в строку, которую я могу «ctrl-c», вставить в свой тест и загрузить в df там. Есть ли способ сделать это?
Проблема в pd.to_string
том, что информация об объекте теряется, нет простого способа десериализовать данные, и даже если бы он был, он был бы получен путем вывода типа, который постоянно нарушает согласованность данных в pandas.
Я думаю, было бы идеально, если бы мы могли распечатать рассол, используя pd.to_pickle
что-то подобное. У кого-нибудь есть более эффективное решение для этого?
пример может быть таким:
s_1 = pd.to_pickle()
print(s_1)
#copy and paste the out put into s_2
s_2 = 'paste printed binary output of s_1 in here.'
df = pd.read_picke(s_2)
Комментарии:
1. @DaniMesejo — вывод типа. Также требуется промежуточный файл. Я пытаюсь максимально исключить шаги в моем тестировании.
2. Кстати, вам не нужен промежуточный файл с csv, s_2 может быть представлением csv и использовать stringio, что касается типов, вы также можете сохранить эту информацию и передать ее в read_csv
3. @DaniMesejo- может быть, я могу сделать то же самое с выходом pickle? Я делаю этот укол прямо сейчас.
4. @DaniMesejo Я как раз собирался написать то же самое, за исключением того , что вам понадобится
BytesIO
, а неStringIO
.5. Но почему pickle, если вы создаете модульный тест, не лучше, если я читаю тест и вижу, как выглядят данные, вместо того, чтобы смотреть на какую-то двоичную строку?
Ответ №1:
Вы можете использовать pickle
для хранения фрейма данных в байтовой строке df_bytes = pickle.dumps(df)
. Затем вы можете скопировать / вставить / распечатать / сохранить / что угодно, что байтовая строка и восстановить фрейм данных позже с помощью df2 = pickle.loads(df_bytes)
.