大佬教程收集整理的这篇文章主要介绍了数据框从一列分成三列,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
想要将 'a'
中的键 ['11 - 18 [1.3']
值拆分为 'a1': ['11','12','13','14','8']
'a2': ['18','17','18','16','48']
'a3': ['1.3','2.8','3.3','4.7','5.4']
此格式的参考正则表达式
regexr.com/61kpi
regexr.com/61kpo
数据
x = {'a': ['11 - 18 [1.3]','12 - 17 [2.8]','13 - 18 [3.3]','14 - 16 [4.7]','8 - 48 [5.3]'],'b': [13.0,11.0,12.0,14.0,15.0]}
打印数据
a b
0 11 - 18 [1.3] 13.0
1 12 - 17 [2.8] 11.0
2 13 - 18 [3.3] 12.0
3 14 - 16 [4.7] 14.0
4 8 - 48 [5.3] 15.0
预期结果
a1 a2 a3 b
0 11 18 1.3 13.0
1 12 17 2.8 11.0
2 13 18 3.3 12.0
3 14 16 4.7 14.0
4 8 48 5.3 15.0
预期输出数据
y = {'a1': ['11','8'],'a2': ['18','48'],'a3': ['1.3','5.3'],21.0,13.0,17.0]}
您可以使用正则表达式将文本拆分为新列,然后将字符串转换为数字,例如:
x = {'a': ['11 - 18 [1.3]','12 - 17 [2.8]','13 - 18 [3.3]','14 - 16 [4.7]','8 - 48 [5.3]'],'b': [13.0,11.0,12.0,14.0,15.0]}
df = pd.DataFrame(X)
df[['a1','a2']] = df['a'].str.split(' - ',expand=TruE)
df[['a2','a3']] = df['a2'].str.split(' \[',expand=TruE)
df['a3'] = df['a3'].str.replace(']','')
df[['a1','a2','a3']] = df[['a1','a3']].astype(float)
获得:
a b a1 a2 a3
0 11 - 18 [1.3] 13.0 11.0 18.0 1.3
1 12 - 17 [2.8] 11.0 12.0 17.0 2.8
2 13 - 18 [3.3] 12.0 13.0 18.0 3.3
3 14 - 16 [4.7] 14.0 14.0 16.0 4.7
4 8 - 48 [5.3] 15.0 8.0 48.0 5.3
,
正则表达式将是实现这一目标的最佳方式:
将 .str.extract
与命名捕获组一起使用:
pattern = r"(?P<a1>\d+) - (?P<a2>\d+) \[(?P<a3>\d\.\d)\]"
new_df = df["a"].str.extract(pattern).join(df["b"])
print(new_df)
a1 a2 a3 b
0 11 18 1.3 13.0
1 12 17 2.8 11.0
2 13 18 3.3 12.0
3 14 16 4.7 14.0
4 8 48 5.3 15.0
使用 .str.extractall
获取所有数字,以防数据框中的模式不一致:
new_df = (
df["a"].str.extractall(r"(\d+\.?\d*)")[0]
.unstack()
.rename(columns=lambda c: "a{}".format(c+1))
.join(df["b"])
)
print(new_df)
a1 a2 a3 b
0 11 18 1.3 13.0
1 12 17 2.8 11.0
2 13 18 3.3 12.0
3 14 16 4.7 14.0
4 8 48 5.3 15.0
以上是大佬教程为你收集整理的数据框从一列分成三列全部内容,希望文章能够帮你解决数据框从一列分成三列所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。