返回另一个问题。最近,我在公司的员工出勤率上获得了一定的置信区间,并将结果转换为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
有人知道我在做什么错吗?
答案 0 :(得分:2)
这是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