簡體   English   中英

從 Pandas 系列字典列表轉換為 DataFrame

[英]Transform from pandas Series list of dicts to DataFrame

我有一個熊貓系列的字典。 我想將其轉換為 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' object has no attribute '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
..         ..          ..           ..

展平內部字典並從字典列表中構造一個數據框:

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

可以從字典列表中創建數據框。 但是根據您的輸出,您正在尋找轉換后的數據框。

#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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM