python - 熊猫根据条件将一列分成两列
问题描述
我通过以下方式在我的 CSV 文件中有一个列
4048.187796
4254.6215672333340-0-0-
4229.9155995666671-0-0-
4427.0494321833340-0-0-
4303.428593050-0-0-
4256.6235064166670-0-0-
4132.5399525833330-0-0-
4263.5820142833341-0-0-
4320.6955591833340-0-0-
4342.1270119333330-0-0-
4447.8283416833340-0-0-
4409.2305202500010-0-0-
4280.650570850-1-0-
4283.5942898166680-0-0-
4341.1896358666670-0-0-
4263.1282187000010-0-0-
4222.3119095333330-0-0-
4314.9844073333331-0-0-
值的格式是一些fraction value + ((1|0)-.*)?
有些行只会有一个小数值。例如。第 1 行。我想将其分成两列,如下所示
4048.187796,
4254.621567233334, 0-0-0-
4229.915599566667, 1-0-0-
4427.049432183334, 0-0-0-
4303.42859305, 0-0-0-
4256.623506416667, 0-0-0-
4132.539952583333, 0-0-0-
4263.582014283334, 1-0-0-
4320.695559183334, 0-0-0-
4342.127011933333, 0-0-0-
4447.828341683334, 0-0-0-
4409.230520250001, 0-0-0-
4280.65057085, 0-1-0-
4283.594289816668, 0-0-0-
4341.189635866667, 0-0-0-
4263.128218700001, 0-0-0-
4222.311909533333, 0-0-0-
4314.984407333333, 1-0-0-
我可以通过逐行读取来做到这一点,然后通过查找'-'的索引和索引 - 2 的子字符串来操作每个值。但是由于我有几个文件并且每个文件有超过 1000 行我不想去做。有没有办法让我直接使用 panda 和 slice 函数来做到这一点?
我试过df['new_col'] = df['last'].str.slice
但我不能给切片开始索引一个固定值,因为它从行到行
解决方案
尝试正则表达式^([0-9.]+)((?:[01]-)*)$
+ str.extract
:
df.last.str.extract('^([0-9.]+)((?:[01]-)*)$')
# 0 1
#0 4048.187796
#1 4254.621567233334 0-0-0-
#2 4229.915599566667 1-0-0-
#3 4427.049432183334 0-0-0-
#4 4303.42859305 0-0-0-
#5 4256.623506416667 0-0-0-
#6 4132.539952583333 0-0-0-
#7 4263.582014283334 1-0-0-
#8 4320.695559183334 0-0-0-
#9 4342.127011933333 0-0-0-
#10 4447.828341683334 0-0-0-
#11 4409.230520250001 0-0-0-
#12 4280.65057085 0-1-0-
#13 4283.594289816668 0-0-0-
#14 4341.189635866667 0-0-0-
#15 4263.128218700001 0-0-0-
#16 4222.311909533333 0-0-0-
#17 4314.984407333333 1-0-0-
玩。
推荐阅读
- python - 如何比较两个 Dataframe 并更新其中一个 Dataframe 中的特定列?
- python - 如何修复 NoReverseMatch 'user' 不是注册的命名空间
- opengl - 光栅化器如何创建片段?
- windows - 是否可以对 Windows 应用程序进行编程以允许用户选择最小化状态图标?
- javascript - 如何等到 vscode.windows.terminal 操作结束?
- javascript - 从数组中返回多个值
- ffmpeg - ffmpeg:有没有办法从图像创建视频并同时覆盖在图像上?
- vue.js - 尝试将 Axios 响应中的值传递给 Vue 中的数据对象显然是愚蠢的错误
- kubernetes - Kubernetes RBAC 默认用户
- javascript - 从 JavaScript 中的范围滑块变量设置 cookie