首页 > 解决方案 > 将文本行转换为 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。

鉴于我有数千行,什么代码可以使这项工作?

标签: pythonpandas

解决方案


假设您的列表在一个文件中,首先将其读入一个字符串(或已经读入一个列表,在这种情况下,下面的代码会有所不同),然后应用代码。

读入字符串:

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 构造函数转换为数据框。


推荐阅读