Разделение одного столбца на три с помощью разделителя - PullRequest
0 голосов
/ 05 октября 2018

Вернулся с другой проблемой.Недавно я собрал некоторый доверительный интервал между показателями посещаемости сотрудников в моем бизнесе и преобразовал результаты в dframe:

def mean_confidence_interval(unstacked, confidence=0.9):
    a = 1.0 * np.array(unstacked)
    n = len(a)
    m, se = np.nanmean(a), scipy.stats.sem(a, nan_policy='omit')
    h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
    return m, m-h, m+h

answer = unstacked.apply(mean_confidence_interval)
answer = answer.to_frame(name='Interval')
answer = answer.reset_index()
answer

, который выдает что-то похожее на это

Employee|             Interval
-------------------------------
Karl    |      (0.75,0.70,0.80)

Я пыталсяиспользуйте запятую в качестве разделителя для создания трех новых столбцов.

Mean | Low | High

До сих пор я пытался:

answer[['Mean','Low', 'High']] = answer['Interval'].str.split(',',expand=True)
answer

только чтобы вернуть его с:

ValueError: Columns must be same length as key

Я также пытался использовать str.extract какследующее:

p = r'(?P<Mean>-?\d+\.\d+).*?(?P<Low>-?\d+\.\d+).*?(?P<High>-?\d+\.\d+)'
answer[['Mean','Low', 'High']] = answer['Interval'].str.extract(p,expand=True)
answer

, который возвращает нужные мне столбцы, но фактически не извлекает необходимую информацию:

    Employee    Interval        Mean  Low  High
0   Karl    (0.75, 0.70, 0.80)  NaN   NaN  NaN

Кто-нибудь знает, что я делаю неправильно?

1 Ответ

0 голосов
/ 05 октября 2018

Это tuple не строка

pd.DataFrame(df.Interval.values.tolist())
Out[1098]: 
      0    1    2
0  0.75  0.7  0.8

#df[['Mean','Low', 'High']]=pd.DataFrame(df.Interval.values.tolist())

После того, как мы изменим тип данных на str, ваше регулярное выражение будет работать

df['Interval'].astype(str).str.extract(p,expand=True)
Out[1103]: 
   Mean  Low High
0  0.75  0.7  0.8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...