我有一个CSV输入文件,格式如下,我正在寻找一种相当简单的方法来转换为正常形状的pandas中的框架。CSV数据文件将所有数据堆叠成两列,每个数据块由空行分隔,如下所示。注意,为了便于解释,我为三个块集设置了相同的时间戳值,但实际上它们可以不同:
Trace Name,SignalName1
Signal,<signal info>
Timestamp,Value
2023-10-04 15:36:43.757193 EDT,13
2023-10-04 15:36:43.829083 EDT,14
2023-10-04 15:36:43.895651 EDT,17
2023-10-04 15:36:43.931145 EDT,11
,
Trace Name,SignalName2
Signal,<signal info>
Timestamp,Value
2023-10-04 15:36:43.757193 EDT,131
2023-10-04 15:36:43.829083 EDT,238
2023-10-04 15:36:43.895651 EDT,413
2023-10-04 15:36:43.931145 EDT,689
,
Trace Name,SignalName3
Signal,<signal info>
Timestamp,Value
2023-10-04 15:36:43.757193 EDT,9867
2023-10-04 15:36:43.829083 EDT,1257
2023-10-04 15:36:43.895651 EDT,5736
2023-10-04 15:36:43.931145 EDT,4935
字符串
整形后所需的输出应如下所示:
Timestamp SignalName1 SignalName2 SignalName3
0 10/4/2023 15:36:43 13 131 9867
1 10/4/2023 15:36:43 14 238 1257
2 10/4/2023 15:36:43 17 413 5736
3 10/4/2023 15:36:43 11 689 4935
型
3条答案
按热度按时间e3bfsja21#
您可以使用多个换行符拆分文件,然后在每个块上使用
read_csv
,然后使用concat
:字符串
假设(如果需要,可以调整):
输出量:
型
zpf6vheq2#
有时候,我发现截取一个文本流(例如,从一个
TextIOWrapper
打开的文件)并以流的方式修改它很有用。该方法适用于任意大的文件。示例应用程序包括:
你可以在这里这样做,并在每一行中注入一个“key”。当处理器遇到
Trace Name,key
时,就会获得这个key。使用适当的自定义
Proc
和实用程序类FileModifier
(定义如下),用法很简单:字符串
然后,针对您的案例的自定义处理器将是:
型
最后,
FileModifier
类(可以用于许多不同类型的动态修改)是:型
示例
使用包含示例数据的文件
test.csv
:型
当然,你可以重塑:
型
9cbw7uwe3#
由于文件始终由两个逗号分隔的行组成,因此另一种可能性是使用最小的
csv_read
参数读取它,然后进行后处理。1.最小read_csv
字符串
在这个阶段,
raw.dtypes
都是object
,因为行不是同质的,但是可以快速排序。型
2.后期处理