我在列表中有成千上万行,例如下面的列表,我想将其转换成由不同列组成的pandas表。
2018-12-03 21:15:24销售量:120 ID:534343北美
2018-12-03 21:15:27销售量:65 ID:534344欧洲
理想情况下,我想用以下几列创建一个熊猫结构:日期,销售,ID,地区,然后用适合这些值的值填充它。
例如因此,在第一行中,我的销售额为120,ID = 534343,地区=北美,日期= 2018-12-03 21:15:24。
鉴于我有成千上万的行,什么代码可以完成这项工作?
答案 0 :(得分:0)
假设列表位于文件中,请先将其读入字符串(或已读入列表,在这种情况下,以下代码将有所不同),然后应用代码。
要读入字符串:
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构造函数将其转换为数据框。