Python 处理具有可变分隔符和行长度的数据帧
我有一个乏味的csv文件,格式如下Python 处理具有可变分隔符和行长度的数据帧,python,pandas,Python,Pandas,我有一个乏味的csv文件,格式如下 HELLO 1000 db1 3.88 HELLO 10 db123456 3.8899949 HELLO repository 10.0000 HELLO rep 001 0.001 基本上,前四个字符始终是常量,而名称的长度和分隔符不同 (例如,“1000 db1”)和最终值都是浮点数,但格式/长度不同 我想要的是能够把专栏理解为 constant name value HELLO ..... .... 我一直在寻找解决办法,但没
HELLO 1000 db1 3.88
HELLO 10 db123456 3.8899949
HELLO repository 10.0000
HELLO rep 001 0.001
基本上,前四个字符始终是常量,而名称的长度和分隔符不同
(例如,“1000 db1”)和最终值都是浮点数,但格式/长度不同
我想要的是能够把专栏理解为
constant name value
HELLO ..... ....
我一直在寻找解决办法,但没有找到答案。起初,我在努力
df.map(λx:x[…])
剪切最后一个值,但由于最后一个值并不总是具有相同的长度,因此不起作用
提前感谢我想您应该将CSV分为三列。您可以为任务使用
re
模块(如果file.csv
的格式与您在问题中描述的格式相同):
印刷品:
constant name value
0 HELLO 1000 db1 3.88
1 HELLO 10 db123456 3.8899949
2 HELLO repository 10.0000
3 HELLO rep 001 0.001
很难理解你想要什么。也许你可以有一些输入/输出示例?嗨,Andrej,这正是我想要的外观,非常感谢。我不太清楚,你能帮我理解你使用的特殊字符组合吗?@FrancescoGentile这是正则表达式,对处理文本非常有用。我做了,右边有这个正则表达式的解释。基本上,我试着找到三组——中间的一组应该是最大的一组。非常感谢Andrej,这是非常有用和清楚的。最后一个问题:你为什么说中间群体(名字)应该是最大的?据我所知,你的重新表达是指将第一个空格和最后一个空格之间的任何内容作为中间组,不管有什么内容。“我理解错了吗?”@FrancescoGentile是的,我的意思是中间组应该是最大的,在第一个空格和最后一个空格之间。再次感谢@Andrej。我认为我提供的示例有点让人困惑:我的csv文件实际上没有空行,但每行末尾都有换行符,因此第二个将采用这一点。我通过使用([^\s]+)[[](.*)[](.+)使其工作,因此它查找第一个和第二个空格,而不是其他/s字符。。。
constant name value
0 HELLO 1000 db1 3.88
1 HELLO 10 db123456 3.8899949
2 HELLO repository 10.0000
3 HELLO rep 001 0.001