从CSV fi用Python或R创建时间线

2024-04-24 20:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含两列的CSV文件。{cd1>第二列是字母和数字的组合。有时每个日期可能有一个>;1个主机名,在这种情况下,两个主机名之间用逗号隔开,有时主机名可能包含一个特殊字符,如连字符或句点。在

我还要提到,这是一个文件描述了一个主机从网络上被禁用的那天。在

下面是一个示例:

6/7/17  ml12308sASd
8/28/17 Mloasjdiaosjd1028knsd, mlsaj19209s, asd12122sda
8/28/17 Amandas-macbook.local
9/13/18 john-deers_win.local

我正在尝试创建一个时间线,显示在X天XYZ主机被禁用。在

下面是我的基本R脚本,用于描述R读取csv文件的数据类型:

^{pr2}$

如果有人在R或Python中提供帮助,我们将不胜感激!在


Tags: 文件csvgt网络示例local字母情况
2条回答

下面是如何将列表放入结构化df中,假设读取.csv将所有内容读入一个类似于我的结构的列表中。如果您的数据已经处于与示例中描述的结构相似的结构中,请参阅此答案的最后一部分。在

从类型列表进行数据清理和结构化:

library(stringr)

#Loaded CSV Data in list
list1<-list(
"6/7/17", "ml12308sASd",
"8/28/17","Mloasjdiaosjd1028knsd", 
"mlsaj19209s", "asd12122sda",
"8/28/17","Amandas-macbook.local",
"9/13/18", "john-deers_win.local"
)

list2<-unlist(list1)

#Collapse to one string
list3<-paste(list2, collapse=' ')

#Find groups for users
users<-regmatches(list3,gregexpr("(?<=\\d\\/..\\s)(.*?)(?=(..\\/..\\/)|($))",list3, perl=T))

#Unlist to index
users<-unlist(users)

#Split individual users per group
users<-strsplit(users, "\\s+")

#Concatenate group individuals, separated with comma
for(i in 1:length(users)){
users[i]<-str_c(users[[i]], sep="", collapse=", ")
}

#Re-unlist as concatenate lsited
users<-unlist(users)

#Grab dates from main string
dates<-regmatches(list3,gregexpr("(..|.)\\/(..|.)\\/..",list3, perl=T))

#Unlist Dates
dates<-unlist(dates)

#Put into data frame
df<-data.frame(dates,users)

> df
     dates                                         users
1   6/7/17                                   ml12308sASd
2  8/28/17 Mloasjdiaosjd1028knsd, mlsaj19209s, asd12122sda
3  8/28/17                         Amandas-macbook.local
4  9/13/18                          john-deers_win.local

基于日期的聚合

^{2}$

也许我误解了这个问题,但是你可以很容易地用熊猫来读表。通过parse dates选项,列表中的日期将被格式化为索引,并对条目进行排序。在

正如评论中所说的,当你在名单中有更多的主人,你会得到第二,第三。。。可搜索的列。在

浏览列表u可以很容易地得到你正在搜索的主机,并以正确的格式重新保存它们

相关问题 更多 >