У меня есть следующий пример DataFrame, который мне нравится преобразовывать:
import pandas as pd
import re
d = {'example' : pd.Series(["['Adventure' 'African elephant' 'Animal' 'Ball game' 'Bay' 'Body of water' 'Communication Device' 'Electronic device']"])}
df = pd.DataFrame(d)
df.example = [[w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower())] for x in tqdm(df.example)]
df
Вне:
0 [adventure, african_elephant, animal, ball_game ...]
Само преобразование (и ввод данных) правильное, однако как преобразовать каждую строку в DataFrame так, чтобы каждая строка была не списком, а простой строкой токенов?
Желаемый результат:
Вне:
0 adventure, african_elephant, animal, ball_game ...
Я пытался:
df.example = [(w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower())) for x in tqdm(df.example)]
Однако это вернуло <generator object <listcomp>.<genexpr> at 0x11...

Добавляйте только join в генератор:
df.example = [', '.join(w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower()))
for x in (df.example)]
print (df)
example
0 adventure, african_elephant, animal, ball_game...
@Christopher - тоже с образцами данных?
На всякий случай, возможно, pandas str.join пригодится в будущем ;-)
1) добавил вторую строку в ваш примерный фрейм данных
2) не модифицировал свой генератор
3) добавил дополнительную строку:
df['example'] = df['example'].str.join(',')
Рабочий пример:
import pandas as pd
import re
d = {
'example' : pd.Series([
"['a' 'b c' 'd' 'e f' 'g' 'h i j' 'k l' 'm n']",
"['a' 'b c' 'd']"
]),
}
df = pd.DataFrame(d)
display(df)
example
0 ['a' 'b c' 'd' 'e f' 'g' 'h i j' 'k l' 'm n']
1 ['a' 'b c' 'd']
df.example = [[w.replace(' ', '_') for w in re.findall(r"'([^']*)'", x.lower())] for x in tqdm(df.example)]
df['example'] = df['example'].str.join(',')
display(df)
example
0 a,b_c,d,e_f,g,h_i_j,k_l,m_n
1 a,b_c,d
Я проверил свои данные и, видимо, он создал много таких:
_, _, _, _, _, _, _,...