sri*_*amn 1 python dictionary r data-structures
我有一个文本文件,以这种格式保存数据:
21-Jun-2013 22:12:52:137, INFO, *********************************************************************
21-Jun-2013 22:12:52:137, INFO, Data being shown
21-Jun-2013 22:12:52:137, INFO, *********************************************************************
21-Jun-2013 22:12:52:137, INFO, Meta-data
21-Jun-2013 22:12:52:137, INFO, Meta-data
21-Jun-2013 22:12:52:137, INFO, Exp 1 2
21-Jun-2013 22:12:52:168, INFO, -------------------------------------------------------------
21-Jun-2013 22:12:52:184, INFO, 1 0.00000 * 1.00000 0.00000 * 1.00000
21-Jun-2013 22:12:31:919, INFO, 2 0.00000 * 1.00000 0.00000 * 2.00000
21-Jun-2013 22:12:31:997, INFO, 3 0.00000 * 5.33380 0.00000 * 5.33380
21-Jun-2013 22:12:32:059, INFO, 4 0.00000 * 0.00000 0.00000 * 0.00000
21-Jun-2013 22:12:32:137, INFO, 5 0.00000 * 0.00000 0.00000 * 0.00000
Run Code Online (Sandbox Code Playgroud)
该文件是程序的事件日志,用于调试程序.每行以时间戳开头.文件的前5行具有与文本文件相关的元数据,并且不感兴趣.要分析的数据从第6行开始.第6行是列的标题.第一列Exp存储数据的行id.后续的column-headers只是column-id.这些列中的每一列中的数据是乘以的2个量(比如A*B).实际数据的列数为千位,行-id为几百万.
现在,我想使用R或Python生成一个字典列表来处理这些数据.对于给定的示例,我想要一个像这样的字典列表:
expressionList = [ row1 , row2 , row3, row4, row5 ]
Run Code Online (Sandbox Code Playgroud)
列表中的每个元素都应该是字典.每个元素的扩展形式如下所示:
row1 = { 'col1A': 0.00000, 'col1B': 1.00000, 'col2A': 0.00000, 'col2B': 1.00000 }
row2 = { 'col1A': 0.00000, 'col1B': 1.00000, 'col2A': 0.00000, 'col2B': 2.00000 }
row3 = { 'col1A': 0.00000, 'col1B': 5.33380, 'col2A': 0.00000, 'col2B': 5.33380 }
row4 = { 'col1A': 0.00000, 'col1B': 0.00000, 'col2A': 0.00000, 'col2B': 0.00000 }
row5 = { 'col1A': 0.00000, 'col1B': 0.00000, 'col2A': 0.00000, 'col2B': 0.00000 }
Run Code Online (Sandbox Code Playgroud)
我对这两种编程语言都很陌生 - 任何帮助/指导都非常感谢!
正如评论中所述,read.table应该对您的数据起作用.
这是一个例子.您的文本文件已在我的主目录中保存为"mytest.txt".用实际路径替换您的文件.我们已指定" skip = 7"删除前几行:
mydf <- read.table("~/mytest.txt", skip=7)
mydf
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1 21-Jun-2013 22:12:52:184, INFO, 1 0 * 1.0000 0 * 1.0000
# 2 21-Jun-2013 22:12:31:919, INFO, 2 0 * 1.0000 0 * 2.0000
# 3 21-Jun-2013 22:12:31:997, INFO, 3 0 * 5.3338 0 * 5.3338
# 4 21-Jun-2013 22:12:32:059, INFO, 4 0 * 0.0000 0 * 0.0000
# 5 21-Jun-2013 22:12:32:137, INFO, 5 0 * 0.0000 0 * 0.0000
Run Code Online (Sandbox Code Playgroud)
可以使用的载体中的R子集列TRUE和FALSE.这里,模式似乎是我们想要删除的一组四列,然后是"保持,丢弃,保持"模式.
## Create the vector of what we want to keep (TRUE) and drop (FALSE)
keepdrop <- c(FALSE, FALSE, FALSE, FALSE, rep(c(TRUE, FALSE, TRUE),
length.out=length(mydf)-4))
## Subset to drop the unwanted columns
mydf <- mydf[keepdrop]
## Let's make some nicer names
cols <- length(mydf) %/% 2
names(mydf) <- paste("col", sequence(cols),
rep(c("A", "B"), each = cols),
sep = "_")
## The final output
mydf
# col_1_A col_2_A col_1_B col_2_B
# 1 0 1.0000 0 1.0000
# 2 0 1.0000 0 2.0000
# 3 0 5.3338 0 5.3338
# 4 0 0.0000 0 0.0000
# 5 0 0.0000 0 0.0000
Run Code Online (Sandbox Code Playgroud)
从这里,访问信息非常简单:
### Third row
mydf[3, ]
# col_1_A col_2_A col_1_B col_2_B
# 3 0 5.3338 0 5.3338
### Second column, as a data.frame, by position
mydf[, 2, drop = FALSE]
# col_2_A
# 1 1.0000
# 2 1.0000
# 3 5.3338
# 4 0.0000
# 5 0.0000
### Fourth column, as a vector, by name
mydf[, "col_2_B"]
# [1] 1.0000 2.0000 5.3338 0.0000 0.0000
Run Code Online (Sandbox Code Playgroud)
除此之外,您可能希望fread从"data.table"包中查看该函数,这有助于更快地读取大数据.
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |