2015-07-31 4 views
2

Есть и другие подобные вопросы, но разница в том, что в моем ядре данных уже много столбцов, только один из которых необходимо разделить.Разделите столбец pandas на два

У меня есть большой dataframe (сотни столбцов, миллионы строк). Я хотел бы разбить один из этих столбцов, когда символ («|») находится в строке.

Все значения имеют только один символ «|».

Для фиксированной длины я хотел бы сделать это: ФР [ 'StateInitial'] = Df [ 'состояние'] ул. [: 2]

Я хотел бы заменить 2 на string.index (» | "), но как я могу назвать строку?

+0

Возможный дубликат (https://stackoverflow.com/questions/14745022/how-to-split-a-column-into-two-columns) – LeoRochael

ответ

5

Как насчет:

df = pd.DataFrame(['a|b', 'c|d']) 
s = df[0].apply(lambda x: x.split('|')) 
df['left'] = s.apply(lambda x: x[0]) 
df['right'] = s.apply(lambda x: x[1]) 

Выходные:

 0 left right 
0 a|b a  b 
1 c|d c  d 
0

Сначала установите вами новые значения столбцов равны старым значениям столбцов.

Затем создайте новый столбец со значениями, первоначально равными None.

Теперь обновите новый столбец с действительными значениями первого.

df['new_col1'] = df['old_col'] 
df['new_col2'] = None 
df['new_col2'].update(df.new_col1.apply(lambda x: x.str.split('|')[1] 
         if len(x.str.split()) == 2 else None)) 
1

Вот один вкладыш, который опирается на ответ, предоставленной @santon: [? Как разбить колонну на две колонки]

df['left'],df['right'] = zip(*df[0].apply(lambda x: x.split('|'))) 

>>> df 
    0 left right 
0 a|b a  b 
1 c|d c  d 
+1

Что здесь делает *? – sheldonzy

Смежные вопросы