python pandas dataframe列转换为dict键和值

时间:2013-08-02 08:46:33

标签: python dictionary data-conversion dataframe

具有多列的python pandas数据帧,dict只需要两列。一个是dict的键,另一个是dict的值。我怎么能这样做?

数据帧:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

需要将区域定义为键,在dict中计为值。提前谢谢你。

5 个答案:

答案 0 :(得分:113)

如果lakesDataFrame,您可以执行类似

的操作
area_dict = dict(zip(lakes.area, lakes.count))

答案 1 :(得分:1)

使用pandas可以完成:

如果您的数据框是湖泊:

area_dict = lakes.to_dict('records')

答案 2 :(得分:1)

如果“湖泊”是您的 DataFrame,您可以执行以下操作:

while (in_file >> color >> category >> age >> value) {
            cout.width(10);
            cout.setf(ios::right);
            cout << color;
            cout.width(10);
            cout.setf(ios::right);
            cout << category;
            cout.width(10);
            cout.setf(ios::right);
            cout << age;
            cout.width(10);
            cout.setf(ios::right);
            cout << value << endl;
        }

我的解决方案:

# Your dataframe
lakes = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lakes.set_index('co tp', inplace=True)

或@punchagan 的解决方案(我更喜欢)

area_dict = lakes.set_index("area")["count"].to_dict()

两者都应该有效。

答案 3 :(得分:1)

回答@Jessie Marks 的问题,如果你想使用多列作为键/值,如何使用这个 dict(zip(***)) 方法,答案是压缩拉链;例如:

dict(zip(df['key'], zip(df["value col 1"], df_['value col 1'])))

或者如果您希望使用多列作为键:

dict(zip(zip(df['key 1'], df['key 2']), zip(df["value col 1"], df_['value col 1'])))

这在 pandas v1.1.5 上对我有用;蟒蛇 3.6.13

附注。抱歉,我不会直接在 @Jessie Marks 问题下回复,它的新帐户,我还不能这样做。

答案 4 :(得分:0)

如果您想和熊猫玩耍,也可以这样做。但是,我喜欢punchagan的方式。

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}