python - 从非结构化文本创建 pandas DataFrame
问题描述
抱歉这个菜鸟问题,但它就在这里。我正在尝试分析一些 Facebook 消息。到目前为止,我下载了一个 html 文件,用 BeautifulSoup 把它变成了一个整洁的列表,现在我正试图用它创建一个数据框。
我正在查看此资源:https ://datatofish.com/list-to-dataframe/但它没有成功。
这是我现在拥有的格式:
list = ['2019-01-07 12:51 PM', 'name1', 'hi how are you', 'im at home', 'wanna come over?', '2019-01-07 01:02 PM', 'name2', 'hell yeah', '', 'ill bring beer', '2019-01-07 01:06 PM', 'name1', 'awesome', 'and so on']
我尝试了几种不同的方法,但我开始觉得我有点吃不消了。我现在正在学习。
这是我希望得到的输出:
index date time name message
0 2019-01-07 12:51 PM name1 hi how are you
1 2019-01-07 12:51 PM name1 im at home
2 2019-01-07 12:51 PM name1 wanna come over?
3 2019-01-07 12:56 PM name2 hell yeah
我尝试遍历列表并填充列,然后点击日期、名称或消息。
正如我所说,我正在学习,所以如果你能指出我正确的研究方向,而不是解决方案,那就太棒了。我将不胜感激。谢谢!
编辑:我尝试了几个现有的消息解析器,但由于某种原因,它们都在 2018 年不再受支持。他们也都给我解析错误信息。
解决方案
这有点难看,但它有效。我很乐意支持一个更优雅的解决方案!
l = iter(['2019-01-07 12:51 PM', 'name1', 'hi how are you', 'im at home', 'wanna come over?', '2019-01-07 01:02 PM', 'name2', 'hell yeah', '', 'ill bring beer', '2019-01-07 01:06 PM', 'name1', 'awesome', 'and so on'])
df = pd.DataFrame()
# get first element in list
x = next(l)
# if element is the last, catch the IterationError and stop
try:
while 1:
# try to convert element to datetime
datetime = pd.to_datetime(x, format="%Y-%m-%d %H:%M %p")
# if successful get next element as name
x = next(l)
name = x
# get next elements as messages while they do not match datetime format
x = next(l)
while 1:
try:
# if datetime conversion is successful break while
pd.to_datetime(x, format="%Y-%m-%d %H:%M %p");
break
except ValueError:
# else add message to dataframe
df = df.append([{"datetime":datetime,"name":name,"msg":x}])
x = next(l)
except StopIteration:
pass
df["date"] = df["datetime"].dt.date
df["time"] = df["datetime"].dt.time
print(df)
datetime msg name date time
0 2019-01-07 12:51:00 hi how are you name1 2019-01-07 12:51:00
0 2019-01-07 12:51:00 im at home name1 2019-01-07 12:51:00
0 2019-01-07 12:51:00 wanna come over? name1 2019-01-07 12:51:00
0 2019-01-07 01:02:00 hell yeah name2 2019-01-07 01:02:00
0 2019-01-07 01:02:00 name2 2019-01-07 01:02:00
0 2019-01-07 01:02:00 ill bring beer name2 2019-01-07 01:02:00
0 2019-01-07 01:06:00 awesome name1 2019-01-07 01:06:00
0 2019-01-07 01:06:00 and so on name1 2019-01-07 01:06:00
推荐阅读
- actions-on-google - 我对 Google Actions 中的 Alpha 版发布很生气
- excel - 为布尔结果评估两个索引、匹配、匹配函数似乎不起作用
- javascript - 使用 Lodash 从对象中删除字段
- java - Spring Boot JPA 未知用户
- c# - 如何将连接字符串注入外部程序集(项目)控制器?
- ios - 当移动到嵌入在 UITableViewCell 中的 UITextView 中的新行时,光标消失
- google-apis-explorer - YouTube 分析 API 行为空
- groovy - 如何在 Groovy 闭包中隐藏变量?
- security - LDAP 与 Solr 的集成
- linux - 为什么来自套接字的 recv() 不会阻塞