【问题标题】:Convert key value pair strings in a list to columns in a Data Frame Python将列表中的键值对字符串转换为数据框 Python 中的列
【发布时间】:2021-05-23 08:49:56
【问题描述】:

我有一个列表,其中包含以下内容:

["ID : 1234 姓名:John 考试代码:5678", "ID : 4566 姓名: Jack 学习代码: 5678", "ID:5678 姓名:Helen 考试代码:5435"]

列表中的每个项目都有相同的标题,如“ID”和“姓名”,但有些有“考试代码”,其他有“学习代码”

如何将其转换为显示以下输出的 DataFrame:

ID Name Exam Code Learning Code
1234 John 5678
4566 Jack 5678
5678 Helen 5435

更新的查询:

抱歉,部分数据可能还有名字和姓氏 例如 [“ID:1234 姓名:John Black 考试代码:5678”, "ID : 4566 姓名: Jack 学习代码: 5678", "ID:5678 姓名:Helen 考试代码:5435"]

那么我们该如何处理呢?

ID Name Exam Code Learning Code
1234 John Black 5678
4566 Jack 5678
5678 Helen 5435

【问题讨论】:

  • 到目前为止你尝试过什么?解析列表项中的字符串将是一个很好的起点

标签: python list dataframe


【解决方案1】:

您可以使用re 模块来解析数据。例如:

import re
import pandas as pd

lst = [
    "ID : 1234 Name: John Exam Code:5678",
    "ID : 4566 Name: Jack Learning Code: 5678",
    "ID : 5678 Name: Helen Exam Code: 5435",
]

data = []
for line in lst:
    data.append(
        dict(
            re.findall(
                r"(ID|Name|Exam Code|Learning Code)\s*:\s*([^\s]+)", line
            )
        )
    )

df = pd.DataFrame(data).fillna("")
print(df)

打印:

     ID   Name Exam Code Learning Code
0  1234   John      5678              
1  4566   Jack                    5678
2  5678  Helen      5435              

编辑:添加姓氏:

lst = [
    "ID : 1234 Name: John Black Exam Code:5678",
    "ID : 4566 Name: Jack Learning Code: 5678",
    "ID : 5678 Name: Helen Exam Code: 5435",
]

data = []
for line in lst:
    id_ = re.search(r"(ID)\s*:\s*(\d+)", line)
    name = re.search(r"(Name)\s*:\s*(.*)\s+(?:Exam|Learning)", line)
    code = re.search(r"(Exam Code|Learning Code)\s*:\s*(.*)", line)
    data.append(dict([id_.groups(), name.groups(), code.groups()]))

df = pd.DataFrame(data).fillna("")
print(df)

打印:

     ID        Name Exam Code Learning Code
0  1234  John Black      5678              
1  4566        Jack                    5678
2  5678       Helen      5435              

【讨论】:

  • 哇!非常感谢,这很好用。
  • 只是最后一个查询,我是一个经常表达的初学者,什么exp。如果有名字和姓氏,应该使用?
  • @manosubron 你能举个例子吗?编辑您的问题并将其放在那里。
  • 已添加。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 2022-10-15
  • 2021-10-15
  • 2022-08-17
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多