我有一系列的字典。我想将其转换为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
.. .. .. ..
答案 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)