Как извлечь двумерный массив, закодированный в списке строк в кадре данных панд? - PullRequest
0 голосов
/ 03 мая 2018

Я испортил кадр данных. У меня есть столбцы, которые содержат строки, которые кодируют список чисел

, например

df=
                                    mycol
0   '[ 0.5497076,   0.59722222,  0.42361111]'  
1   '[ 0.8030303,   0.69090909,  0.52727273]'  
2   '[ 0.51461988,  0.38194444,  0.66666667]'

РЕДАКТИРОВАТЬ: на самом деле, запятые также отсутствуют

df=
                                    mycol
0   '[ 0.5497076   0.59722222  0.42361111]'  
1   '[ 0.8030303   0.69090909  0.52727273]'  
2   '[ 0.51461988  0.38194444  0.66666667]'

Каждая из строк кодирует список с фиксированным количеством элементов. Я хотел бы преобразовать это mycol в 3 (в общем случае N, где N=len(df[mycol][0]) columns каждый из них числовой, содержащий один элемент из исходного списка в mycol

Я попробовал следующее, но безуспешно

df[mycol]=df[mycol].apply(lambda s: s.split())
df[mycol]=df[mycol].apply(lambda s: np.fromstring(s))

df[['mycol1','mycol2','mycol3']] = pd.DataFrame(df[mycol].values.tolist(), index= df.index)

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете преобразовать свой список в словарь, а затем напрямую преобразовать его в DataFrame -

import re
def stringtodict(x):
    d = {}
    x = x.replace("[", "").replace("]", "").strip()
    x = re.split("\\s{1,}", x)
    for i in range(len(x)):
        d[str(i)] = float(x[i])
    return d

pd.DataFrame(df['col1'].apply(stringtodict).tolist()) 

Я отредактировал код для пробелов как разделитель

0 голосов
/ 03 мая 2018

Это должно помочь.

Ex:

import pandas as pd
df = pd.DataFrame({"mycol": ['[ 0.5497076   0.59722222  0.42361111]', '[ 0.8030303   0.69090909  0.52727273]']})
df[['mycol1','mycol2','mycol3']]  = df["mycol"].apply(lambda x: x.replace("[", "").replace("]", "").split()).apply(pd.Series)
print(df)

Выход:

                                   mycol     mycol1      mycol2      mycol3
0  [ 0.5497076   0.59722222  0.42361111]  0.5497076  0.59722222  0.42361111
1  [ 0.8030303   0.69090909  0.52727273]  0.8030303  0.69090909  0.52727273
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...