2017-01-05 2 views
0

У меня есть DataFrame df с колонками 'a'. Как создать новый столбец 'b', который имеет dtype=object?Как создать новые пустые столбцы pandas с определенным dtype?

Я знаю, что это можно считать плохую форму, но в данный момент у меня есть dataframe df где столбец 'a' содержит массивы (каждый элемент является np.array). Я хочу создать новый столбец 'b', где каждый элемент является новым np.array, который содержит журналы соответствующего элемента в 'a'.

На данный момент я попробовал эти два метода, но ни работали:

for i in df.index: 
     df.set_value(i,'b', log10(df.loc[i,'a'])) 

и

for i in df.index: 
     df.loc[i,'b'] = log10(df.loc[i,'a'])) 

Оба дают мне ValueError: Must have equal len keys and value when setting with an iterable.

Я предполагаю, что ошибка возникает из-за того, что dtype нового столбца по умолчанию имеет значение float, хотя я могу ошибаться.

+1

'ф.р. [» new '] =' ''или' df [' new '] = (np.nan) .astype (str) '? – MaxU

+0

В чем смысл использования структур данных 'pandas' для хранения массивов' numpy'? –

+0

Я знаю, что это плохая форма, но в основном у меня есть эти массивы, и я хочу иметь доступ к ним легко, но они логически образуют мерную сетку, поэтому вместо того, чтобы играть с мультииндексированием, я думал, что будет проще просто сделайте это так (т.е. у меня есть 300 «вещей», каждая «вещь» имеет те же 4 параметра/атрибута, и для каждого параметра у меня есть N выборок этого параметра). –

ответ

1

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

df['log_a'] = df.a.apply(lambda x: np.log10(x)) 

enter image description here

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