我真的不习惯大熊猫,因此出现了如何解决此问题的问题:
我有一本叫做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列:key
,replacement key
和integer
,其中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打开和自定义)。
感谢您的帮助:)
答案 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列。