Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:数据框架的字典_Python_Pandas_Dictionary - Fatal编程技术网

Python:数据框架的字典

Python:数据框架的字典,python,pandas,dictionary,Python,Pandas,Dictionary,我想把字典改成熊猫数据框 data = {u'Diluted Normalized EPS': [{u'date': u'2020-01-03', u'value': u'-0.446810'}, {u'date': u'2019-10-04', u'value': u'-0.765540'}, {u'date': u'2019-06-28', u'value': u '-0.574240'}, {u'date': u'2019-03-29', u'value': u'-2.063700'},

我想把字典改成熊猫数据框

data = {u'Diluted Normalized EPS': [{u'date': u'2020-01-03', u'value': u'-0.446810'}, {u'date': u'2019-10-04', u'value': u'-0.765540'}, {u'date': u'2019-06-28', u'value': u
'-0.574240'}, {u'date': u'2019-03-29', u'value': u'-2.063700'}, {u'date': u'2018-12-28', u'value': u'-0.841380'}], u'Net Income Before Extra. Items': [{u'date': u'2020-01-03', u'value': u'-139.000000'}, {u'date': u'2019-10-04', u'value': u'-276.000000'}, {u'date': u'2019-06-28', u'value': u'-185.000000'}, {u'date': u'2019-03-29', u'value': u'-652.000000'}, {u'date': u'2018-12-28', u'value': u'-257.000000'}]}
我想转换成熊猫数据帧,如下所示

         date  Diluted Normalized EPS  Net Income Before Extra. Items
0  2020-01-03  -0.446810                -139.000000
1  2019-10-04  -0.765540                -276.000000
2  2019-06-28  -0.574240                -185.000000
3  2019-03-29  -2.063700                -652.000000
4  2018-12-28  -0.841380                -257.000000

pd.DataFrame(data)
无法返回所需结果

使用嵌套字典理解和
DataFrame
构造函数:

d = {k:{x['date']: x['value'] for x in v} for k, v in data.items()}
df = pd.DataFrame(d).rename_axis('date').reset_index()
print(df)
         date Diluted Normalized EPS Net Income Before Extra. Items
0  2020-01-03              -0.446810                    -139.000000
1  2019-10-04              -0.765540                    -276.000000
2  2019-06-28              -0.574240                    -185.000000
3  2019-03-29              -2.063700                    -652.000000
4  2018-12-28              -0.841380                    -257.000000
运行以下代码:

df = pd.DataFrame.from_dict(data).apply(
    lambda col: pd.DataFrame(col.tolist()).set_index('date').value)\
    .reset_index()
步骤:

  • pd.DataFrame.from_dict(data)
    -创建临时数据帧。 它有两列(字典的键)。每个单元格包含一个字典, 包含2个键(日期和值)

  • pd.DataFrame(col.tolist())
    -lambda函数的第一部分- 将当前列转换为另一个临时数据帧, 有两列(日期和值)

  • 设置索引(“日期”)
    -将日期列更改为索引

  • value
    -仅从上述数据帧中获取value列

  • apply(…)
    -应用上述lambda函数可转换 第一个临时数据帧几乎完全符合我们的要求,即需要2个 以日期作为索引的列

  • reset_index()
    -将索引转换为常规列


  • 看起来您必须修改字典,或者考虑按顺序构建数据帧。祝你好运