python - 将文本行转换为 pandas 结构
问题描述
我在下面的列表中有数千行,我想将其转换为由不同列组成的 pandas 表。
2018-12-03 21:15:24 销售:120 ID:534343 北美
2018-12-03 21:15:27 销售:65 ID:534344 欧洲
理想情况下,我想创建一个包含以下列的 pandas 结构:日期、销售、ID、区域,然后用适合这些值的值填充它。
例如,在第一行中,我的销售额 = 120,ID = 534343,地区 = 北美,日期 = 2018-12-03 21:15:24。
鉴于我有数千行,什么代码可以使这项工作?
解决方案
假设您的列表在一个文件中,首先将其读入一个字符串(或已经读入一个列表,在这种情况下,下面的代码会有所不同),然后应用代码。
读入字符串:
with open('/file/path/myfile.txt','r') as f:
s = f.read()
解析代码:
import re
import pandas as pd
s = """2018-12-03 21:15:24 Sales:120 ID:534343 North America
2018-12-03 21:15:27 Sales:65 ID:534344 Europe"""
sales_re = "Sales:([0-9]+)"
id_re = "ID:([0-9]+)"
lst = []
for line in s.split('\n'):
date = line[0:19]
sale = re.search(sales_re, line).groups()[0]
id = re.search(id_re, line).groups()[0]
region = line[line.rfind(":")+1+len(id)+1:] # Search from last ":", add one to go over ":" and 1 to skip space
x = [date, sale, id, region]
lst.append(x)
df = pd.DataFrame(lst)
df.columns = ['date', 'sale', 'id', 'region']
在上面的示例中,我假设所有内容都加载到字符串中。然后我使用正则表达式提取每行的较难部分并将所有内容附加到一个列表中。然后我使用 pandas.DataFrame 构造函数转换为数据框。
推荐阅读
- angular - 在 ngOnInit 中使用 foreach 将数据推送到数组中
- java - 我需要对我的 kotlin 项目进行哪些更改才能输出库而不是可执行文件
- .net - VSTS Devops 使用 Web 和数据库部署失败回滚到以前的版本?
- python - 无法压缩缓冲区中的文件
- git - Git 更改未应用在背面
- html - 在 ayah sysmbol 的末尾写上数字
- java - Spring data jpa - 具有表的所有可能值的字段
- html - CSS 样式链接不适用于我的导航链接
- android - Android TextToSpeech 仅在调试模式下工作
- pytorch - 如何使用 pytorch 构建多维自动编码器