【问题标题】:How to transform string into pandas dataframe in python [duplicate]如何在python中将字符串转换为pandas数据框[重复]
【发布时间】:2020-12-11 07:58:48
【问题描述】:

我有这个字符串

"id=IAfpK, val=58, id=WNVdi, val=64, id=jp9zt, val=47"

。我想用它创建一个熊猫数据框。有什么想法吗?

【问题讨论】:

  • import pandas as pdstring = "id=IAfpK, val=58, id=WNVdi, val=64, id=jp9zt, val=47"df = pd.DataFrame({'String' : [string]})df
  • @DavidErickson 我想要一个包含两列且长度为 3 的数据框,因为有 3 个键、val 对
  • 有道理。如果您可以对其进行修改并明确说明您想要什么,这些详细信息应该在您的问题中。
  • @DavidErickson 如果没有重复为什么要投票关闭它!
  • 我撤回了我的投票,因为它不像我在您解释后复制粘贴的代码那么简单。

标签: python pandas numpy


【解决方案1】:
import pandas as pd

data = "id=IAfpK, val=58, id=WNVdi, val=64, id=jp9zt, val=47"

data = [*map(lambda x: x.split('='), data.split(', '))]
ids = [*filter(lambda x: x[0] == 'id', data)]
vals = [*filter(lambda x: x[0] == 'val', data)]

df = pd.DataFrame.from_dict(
    data={
        'id': [*map(lambda x: x[1], ids)],
        'val': [*map(lambda x: x[1], vals)]
    }
)

【讨论】:

  • 仅对非常短的数据有用,而且过于复杂。并非所有内容都必须是 map()lambdafilter()。在必要/有用的地方使用它,并且在使用太多时总是使用timeit。以我的经验,整体代码更难阅读且更差(但有其用途)。而是:>>> def better(data): ... from collections import defaultdict as ddict ... out = ddict(list) ... data = [it.split("=") for it in [item.strip() for item in data.split(",")]] ... for key, val in data: ... out[key].append(val) ... return out
  • 抱歉,cmets 无法正确格式化。只需在每个 ... 上添加一个换行符。
猜你喜欢
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 2020-01-24
  • 1970-01-01
  • 2020-07-21
  • 2018-10-04
相关资源
最近更新 更多