Могу ли я использовать функцию Split() для передачи этой серии:
s = pd.Series(['adh', 'bei', np.nan, 'cfj'])
К любому из этих выходов:
s = pd.DataFrame({
'A': ['a', 'b', 'c'],
'B': ['d', 'e', 'f'],
'C': ['h', 'i', 'j']
})
или:
s = pd.DataFrame({
'A': ['a', 'b', np.nan, 'c'],
'B': ['d', 'e', np.nan, 'f'],
'C': ['h', 'i', np.nan, 'j']
})
Обновление: я не знал, что для этого можно напрямую использовать list() - я новичок в DA -. Спасибо @mozway
Вы можете str.split с помощью регулярного выражения, соответствующего символу до и после точки разделения:
s.str.split('(?<=.)(?=.)', expand=True)
Выход:
0 1 2
0 a d h
1 b e i
2 NaN NaN NaN
3 c f j
Чтобы избежать NaN, добавьте dropna:
s.dropna().str.split('(?<=.)(?=.)', expand=True)
Выход:
0 1 2
0 a d h
1 b e i
3 c f j
(?<=.) # match a character before
# match empty string
(?=.) # match a character after
В качестве альтернативы вы также можете преобразовать каждую строку в список и передать конструктору DataFrame
:
out = pd.DataFrame(map(list, s.dropna()))
Есть проблемы с моим ответом?
Спасибо :-) Если все в порядке, не могли бы вы объяснить мне свое регулярное выражение, пожалуйста?
Я добавил описание регулярного выражения
Решения не должны быть предметом обсуждения; вот для чего нужны ответы.