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