我有一组不以制表符或逗号分隔的数据。在记事本中打开时,它看起来非常结构化,如下图所示,但在使用Excel打开时,它的结构不正确
Tuesday 19-April-2010 00:01 CC 11 PQ 1.1 PS1.1 CS# 111 +1 RS113' SC 183 ZA 71
IFJ SC/LY AB CD? EF GH IJK LM NO PQR ST UV WXY ZA BC DEF GHI
1234 SC 122 A 20? 31 1 4? 10 3 2? 19 9 5? - -? 30
1234 SC 123 ' B 60? 11 2 3? 10 5 6? 19 9 4? 17 4 1? 30
1234 SC 124 C 20? 21 2 2? 10 2 1? 9 9 0? - -? 34
1234 SC 125 ^ 1 100? - -? 0 3 3? - -? - -? 10
1234 SC 226 * 5 60? - -? 14 4 3? 9 9 2? 7 3 3? 18
A=<43> B=33 C=24
Tuesday 19-April-2010 00:03 CC 11 PQ 1.1 PS1.1 CS# 111 +1 RS113' SC 183 ZA 71
IFJ SC/LY AB CD? EF GH IJK LM NO PQR ST UV WXY ZA BC DEF GHI
1234 SC 122 A 21? 31 5 4? 17 3 2? 19 9 1? - -? 31
1234 SC 123 ' B 61? 11 2 3? 19 5 6? 19 9 4? 17 4 3? 32
1234 SC 124 C 21? 21 5 2? 10 2 1? 9 9 0? - -? 33
1234 SC 125 ^ 1 101? - -? 7 3 3? - -? - -? 14
0000 SC 226 * 5 61? - -? 14 4 3? 9 9 2? 7 3 3? 18
有什么方法可以让我用熊猫来处理这些数据进行分析吗?你知道吗
编辑:这是我能得到的最接近正则表达式。不幸的是,任何空白字段(如列
GH
行4和5)都将无法正确处理,数据将发生倾斜。你知道吗请注意,我在iPhone上,所以您需要替换所有双引号(“)。你知道吗
正则表达式
[^0-9A-Z\?\-]+
将匹配任何不符合以下条件的字符:对于一个或多个组合。。。你知道吗
这将删除奇怪的特殊字符并处理多个空格分隔符。你知道吗
您将在开始处得到一个额外的空白列。你可以用更多的正则表达式来处理这个问题,但是我会留给你做一些家庭作业(宿醉)。你知道吗
列
SC/LY
将被分成两部分。通过两个阶段的划分(不使用熊猫开始),你可能可以处理这个问题。你知道吗对于熊猫来说,这看起来像:
您的第二行似乎是实际的标题。不过,正如梅德温所指出的,这看起来还是不对的。你知道吗
通常,您可以尝试:
但这将无法正常工作,因为CSV的结构不一致。你知道吗
我建议您首先使用一个脚本将数据转换成合适的CSV格式,然后可以使用Pandas毫无问题地加载。你知道吗
大多数数据都是固定宽度的格式,因此列位置可以硬编码,并应用
strip()
删除任何空格。可以从时间戳行中提取时间和日期,并将其添加到其中每个条目的开头。你知道吗^{} 用于以块的形式读取文件,这还具有跳过段之间不需要的行的效果。它的工作原理是一次读取一行文件,然后将每一行传递给
key
函数(这是使用lambda
函数内联提供的,以节省空间)。如果函数的结果更改,groupby函数将返回具有相同返回的行的列表。在本例中,它正在测试行是否以A=<
字符开头。因此您得到一个返回,其中key
是True
包含以时间戳开始的行列表。然后是以A=<
开头的行列表(在本例中只有一行)。这使得处理整个片段更容易,而不必担心它在哪里完成。第一个条目是时间戳,后跟所有条目。你知道吗列表理解用于从行中提取每个单独的值,并创建值的} 配方用于从
row
。^{cols
读取固定列位置,以获得滑动start
和end
列位置。它们用作字符串片段,用于提取每列的字符。然后,该字符串应用.strip()
来删除任何周围的空格。你知道吗对于你提供的数据,这将给你
为了更好地理解脚本的实际工作方式,我建议您添加一个小的测试文件(带有两个段),然后还添加一些print语句。你知道吗
相关问题 更多 >
编程相关推荐