Панды в обратимую строку?

#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) .