从Pandas Series字典列表转换为DataFrame

时间:2019-09-03 10:07:00

标签: python pandas

我有一系列的字典。我想将其转换为pandas DataFrame。所有字典都有“名称”和“值”。我想将名称转换为列名称和值作为行。

我尝试仅使用pd.DataFrame(mySeriesOfDicts)或将Series转换为首先列出,但没有效果。

from_dicts给我不好的结果:

name  value
svSum7Days 0.0 
svSum91Days 0.0 
svSum364Days 423.0 
newPositionsCount60Days 0.0 

当我尝试添加orient ='index'时,我得到AttributeError:'list'对象没有属性'values'

我的系列的一行:

[{'name': 'svSum7Days', 'value': 0.0},
 {'name': 'svSum91Days', 'value': 0.0},
 {'name': 'svSum364Days', 'value': 423.0},
 {'name': 'newPositionsCount60Days', 'value': 0.0}]

将几行切掉:

0      [{'name': 'svSum7Days', 'value': 0.0}, {'name'...
1      [{'name': 'svSum7Days', 'value': 5.0}, {'name'...
2      [{'name': 'svSum7Days', 'value': 0.0}, {'name'...
3      [{'name': 'svSum7Days', 'value': 0.0}, {'name'...

我希望将此转换为表格:

svSum7Days svSum91Days svSum364Days newPositionsCount60Days
0.0        0.0         423.0        0.0
..         ..          ..           ..

2 个答案:

答案 0 :(得分:1)

平放内部字典并从字典列表中构造一个数据框:

d = [{d['name']:d['value'] for d in l} for l in s] # s being the pd.Series
df = pd.DataFrame(d)

快速检查-

s = pd.Series([[{'name': 'svSum7Days', 'value': 0.0},
 {'name': 'svSum91Days', 'value': 0.0},
 {'name': 'svSum364Days', 'value': 423.0},
 {'name': 'newPositionsCount60Days', 'value': 0.0}],
          [{'name': 'svSum7Days', 'value': 1.0},
 {'name': 'svSum91Days', 'value': 12.0},
 {'name': 'svSum364Days', 'value': 424.0},
 {'name': 'newPositionsCount60Days', 'value': 100.0}]])

d = [{d['name']:d['value'] for d in l} for l in s]
# [{'svSum7Days': 0.0, 'svSum91Days': 0.0, 'svSum364Days': 423.0, 
#   'newPositionsCount60Days': 0.0}, {'svSum7Days': 1.0, ...
pd.DataFrame(d)

    newPositionsCount60Days  svSum364Days  svSum7Days  svSum91Days
0                      0.0         423.0         0.0          0.0
1                    100.0         424.0         1.0         12.0

答案 1 :(得分:0)

可以从词典列表中创建数据框。但是根据您的输出,您正在寻找转换后的数据框。

#your code goes here

import pandas as pd

#creating dummy series
data = pd.Series([{'name': 'svSum7Days', 'value': 0.0},
 {'name': 'svSum91Days', 'value': 0.0},
 {'name': 'svSum364Days', 'value': 423.0},
 {'name': 'newPositionsCount60Days', 'value': 0.0}])


# Convert Series to list
data = data.tolist()

# Create a dataframe
df = pd.DataFrame(data)

# Transpose it
df = df.T

# Create column names
headers = df.iloc[0]
new_df  = pd.DataFrame(df.values[1:], columns=list(headers))
print(new_df)