Pandas DataFrames: как обернуть текст без пробелов

Я просматриваю DataFrame Pandas в Jupyter Notebook, а мой DataFrame содержит строки URL-адреса, длина которых может составлять сотни символов без каких-либо разделительных символов, разделяющих пробелы.

Pandas, кажется, только переносит текст в ячейку, когда есть пробел, как показано на прикрепленном изображении:

введите описание изображения здесь

Если пробелов нет, строка отображается в одной строке, и если места недостаточно, мои параметры либо видят "...", либо я должен установить display.max_colwidth на огромную число, и теперь у меня есть трудночитаемая таблица с большим количеством прокрутки.

Есть ли способ заставить Pandas обернуть текст, скажем, каждые 100 символов, независимо от того, есть ли пробелы?

Ответы

Ответ 1

Если вы только в ad-hoc, временном отображении в Jupyter, вы можете просто вставить пробел каждые 100 символов:

chunk_size = 100

data ['new_column'] = [''.join([val [0 + i: chunk_size + i] для я в диапазоне (0, len (string), chunk_size)] для val в данных ['old_column' ]

Хотя это похоже на причину, в первую очередь это проблема, так это то, что несколько функций свернуты в один столбец. Трудно сказать, не видя ваш более крупный набор данных, но если они все последуют им по той же схеме, я бы настоятельно предложил разделить это на несколько функций (браузер, версия браузера, ОС, версия ОС и т.д.), Что сделает любую дополнительную работу с этим набором данных проще.

Ответ 2

Если вы не возражаете против этого, прежде чем вы поместите все это в фреймворк данных, вы можете сделать это, как описано здесь. В вашем конкретном случае, если вы хотите, чтобы каждая строка имела длину 10 символов, вы бы:

# Input
line = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0; GomezAgent 3.0) 
like Gecko'
n = 10

# Split
line = [line[i:i+n] for i in range(0, len(line), n)]

# The rest is easy
df = pd.DataFrame(line)
print(df)

введите описание изображения здесь

Без пробелов вы получите:

введите описание изображения здесь

И, кстати, пробел в начале последней строки происходит потому, что для заполнения строки, как в предыдущих строках, не должно быть 10 символов. В jupyter вы можете исправить это, используя df.style.set_properties(**{'text-align': 'left'}):

введите описание изображения здесь

Ответ 3

Вы можете создать новый столбец с первыми 100 символами данных

data['new_column'] = [i[:100] for i in data['old_column']]

Ответ 4

Вы можете установить

import pandas as pd
pd.set_option('display.max_colwidth', 0)

а затем каждый столбец будет настолько большим, насколько это необходимо, чтобы полностью отобразить его содержимое. Он будет не обтекать текст содержимым ячеек, хотя (если они не содержат пробелов).

Ответ 5

Вы можете использовать метод str.wrap:

df['user_agent'] = df['user_agent'].str.wrap(100) #to set max line width of 100