根据字典创建具有不同类型值的熊猫数据框

时间:2019-02-20 12:35:57

标签: python pandas dataframe dictionary

我真的不习惯大熊猫,因此出现了如何解决此问题的问题:

我有一本叫做table的字典,它类似于:

table = dict()
table[(1, 1)] = [1000, (1.05, 1.02), [Class1(1.05), Class1(1.02)]]
table[(2, 3)] = [3400, (1.8, 2.9), [Class1(1.8), Class1(2.9)]]
table[(4, 5, 5)] = [2800, (4, 5.2, 5.1), [Class1(4), Class1(5.2), Class1(5.1)]]

在此输入布局中,使用了一个名为Class1的自定义类。此类与pandas数据框无关,因为它将在从字典到数据框的传输中丢失。我正在寻找的输出数据帧仅包含3列:keyreplacement keyinteger,其中key是字典键,replacement key是的第二个值列表,integer是列表的第一个值。

Index          key             Replacement key        Integer
1              (1, 1)          (1.05, 1.02)           1000
2              (2, 3)          (1.8, 2.9)             3400
3              (4, 5, 5)       (4, 5.2, 5.1)          2800

此刻,我正在尝试创建一个空的数据框并逐行填充它。但是,我无法访问和替换每行。

headers = ['Key','Integer', 'Replacement key']
index = range(1, len(table)+1)
df = pd.DataFrame(index=index, columns=headers)

最后,我还想将此数据帧导出为.csv格式(以使用excel打开和自定义)。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

尝试一下:

df = pd.DataFrame.from_dict(table, orient='index').reset_index().iloc[:,:3]
df.columns =['Key','Integer', 'Replacement key']
# swap the column integer and replacement key
df = df[['Key','Replacement key','Integer']]
print(df)

# export .csv
df.to_csv('test.csv')


         Key Replacement key  Integer
0     (1, 1)    (1.05, 1.02)     1000
1     (2, 3)      (1.8, 2.9)     3400
2  (4, 5, 5)   (4, 5.2, 5.1)     2800

说明

from_dict()orient='index'时将字典的键转换为每一行的索引。

df = pd.DataFrame.from_dict(table, orient='index')
print(df)
              0              1                                                  2
(1, 1)     1000   (1.05, 1.02)  [<__main__.Class1 object at 0x7f0f270b6940>, <...
(2, 3)     3400     (1.8, 2.9)  [<__main__.Class1 object at 0x7f0f270b69e8>, <...
(4, 5, 5)  2800  (4, 5.2, 5.1)  [<__main__.Class1 object at 0x7f0f270c19b0>, <...

因此Reset_index()用于将键作为列释放。 iloc用于保留前三列,因为您不需要Class1列。