【问题标题】:How do I import into a DataFrame from an html series (string)?如何从 html 系列(字符串)导入 DataFrame?
【发布时间】:2020-03-23 14:26:00
【问题描述】:

我有一段包含一系列的 html 代码。我已将字符串格式更改为使用熊猫系列所需的格式

s = {"2014-12-31":["price":385000,"count":3],"2013-12-31":["price":380000,"count":2],"2010-12-31":["price":400000,"count":2],"2019-10-31":["price":null,"count":null]}

如何将其放入数据框中?

我试过了

df = pd.Series(s)

我什至尝试删除“价格”:和“计数”:但没有成功。当然,必须有一种简单的方法来从字符串中导入系列,就好像它最初只是定义为系列一样。我错过了什么?

【问题讨论】:

  • 哦,我也试过 df = pd.DataFrame(pd.Series(s)) 。这会创建一个不正确的数据框。
  • 您的 s 如图所示不是有效的 Python 对象。它看起来像一个嵌套的dict,但那些方括号不应该存在,nulls 也不应该存在。请显示变量s的实际值。
  • 请更具体、更谨慎地使用语言。在 Pandas 中,Series 是一个序列类型,这使得 html 系列将字符串格式更改为所需的系列 等表达式令人困惑和模棱两可。

标签: python string pandas dataframe


【解决方案1】:

从此...

s = '{"2014-12-31":["price":385000,"count":3],"2013-12-31":["price":380000,"count":2],"2010-12-31":["price":400000,"count":2],"2019-10-31":["price":null,"count":null]}'

如果我从数据中删除列标题

s = re.sub('"price":','',s)
s = re.sub('"count":','',s)

然后这个工作......(需要导入 json)

df = pd.DataFrame(json.loads(s))

这是生成的数据框...

2014-12-31  2013-12-31  2010-12-31  2019-10-31
0   385000  380000  400000  None
1   3   2   2   None

还有

df.T

给这个

    0   1
2014-12-31  385000  3
2013-12-31  380000  2
2010-12-31  400000  2
2019-10-31  None    None

【讨论】:

  • 这不是答案,是吗?为什么您在此处输入的字符串与您问题中的输入不匹配?
  • 是的,这是一个答案,尽管不允许我使用我认为可以使用 pandas 的列名。与原始问题的唯一变化是数据位于字符串中,因此我添加了引号。
【解决方案2】:
import pandas as pd

priceSeries = pd.Series([385000,380000,400000], index= ["2014-12-31","2013-12-31","2010-12-31"])
countSeries = pd.Series([3,2,2], index= ["2014-12-31","2013-12-31","2010-12-31"])

s = pd.DataFrame({"price": priceSeries,"count":countSeries})

s

【讨论】:

  • 此解决方案需要对原始数据进行完全重新格式化 :( 但是,我已经发布了一个解决方案。我将原始字段作为字符串 - 缺少包含引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 2020-12-23
相关资源
最近更新 更多