字典转变成DataFrame


前言

如果只有单个字典,想要整理成DataFrame,例如:data_dict = { ‘Company’: [‘A’, ‘B’, ‘C’], ‘Revenue’: [100, 150, 200], ‘Employees’: [50, 60, 70]} 则使用pd.DataFrame.from_dict()较为方便。
如果是有多个字典,例如:data_list_of_dicts = [
{‘Company’: ‘Company A’, ‘Employees’: 120, ‘Revenue’: 1000},
{‘Company’: ‘Company B’, ‘Employees’: 80, ‘Revenue’: 800},
{‘Company’: ‘Company C’, ‘Employees’: 300, ‘Revenue’: 1500}]
则直接使用pd.DataFrame()较为方便。


一、pd.DataFrame()

例如:

import pandas as pd

# 字典列表,每个字典代表一行数据
data_list_of_dicts = [
    {'Company': 'Company A', 'Employees': 120, 'Revenue': 1000},
    {'Company': 'Company B', 'Employees': 80, 'Revenue': 800},
    {'Company': 'Company C', 'Employees': 300, 'Revenue': 1500}
]

# 直接将字典列表转换为DataFrame
df = pd.DataFrame(data_list_of_dicts)

# 输出
     Company  Employees  Revenue
0  Company A        120     1000
1  Company B         80      800
2  Company C        300     1500

字典列表:data_list_of_dicts变量存储了一个列表,列表中的每个元素是一个字典。每个字典包含几对键值,分别对应列名和该行数据的值。这样的数据结构非常适合表示表格数据,其中每个字典代表数据表中的一行。
DataFrame转换:使用pd.DataFrame()函数将字典列表转换为DataFrame。Pandas会自动将字典的键作为列名,字典的值作为数据填充到相应的列。

二、pd.DataFrame.from_dict()

2.1 参数解释

与方法一相比,这个方法灵活性更强。pd.DataFrame.from_dict() 可以接受两个主要的参数:

  1. data:这是一个字典或类似映射的对象。
  2. orient:指定了字典键值对应关系的方向,默认为 columns,但可以设置为 index 或其他选项。

2.1.1 orient=‘columns’(默认)

当 orient 设置为 ‘columns’ 时,字典的被视为列名,每个键对应的值(一个数组或列表)是那一列的数据。
代码演示:

import pandas as pd

data_dict = {
    'Company': ['A', 'B', 'C'],
    'Revenue': [100, 150, 200],
    'Employees': [50, 60, 70]
}

df = pd.DataFrame.from_dict(data_dict)
print(df)
  Company  Revenue  Employees
0       A      100         50
1       B      150         60
2       C      200         70

2.1.2 orient=‘index’

当 orient 设置为 ‘index’ 时,字典的键被视为行标签,每个键对应的值(必须是一个字典)构成了那一行的数据。

import pandas as pd

data_dict = {
    'row1': {'Company': 'A', 'Revenue': 100, 'Employees': 50},
    'row2': {'Company': 'B', 'Revenue': 150, 'Employees': 60},
    'row3': {'Company': 'C', 'Revenue': 200, 'Employees': 70}
}

df = pd.DataFrame.from_dict(data_dict, orient='index')
print(df)
      Company  Revenue  Employees
row1       A      100         50
row2       B      150         60
row3       C      200         70

三.append()方法将字典转换为 DataFrame 行(但不推荐使用)

代码如下(示例):

import pandas as pd

# 创建一个空的DataFrame
df = pd.DataFrame()

# 创建一个字典,代表一行数据
data_dict = {'Company': 'Company A', 'Employees': 120, 'Revenue': 1000}

# 使用append()方法将字典添加为DataFrame的新行
df = df.append(data_dict, ignore_index=True)

# 添加更多的行
df = df.append({'Company': 'Company B', 'Employees': 80, 'Revenue': 800}, ignore_index=True)
df = df.append({'Company': 'Company C', 'Employees': 300, 'Revenue': 1500}, ignore_index=True)

# 打印DataFrame查看结果
print(df)
     Company  Employees  Revenue
0  Company A        120     1000
1  Company B         80      800
2  Company C        300     1500

ignore_index=True, 意味着不使用data_dict中的索引。相反,Pandas会忽略它,并重新为新合并的DataFrame创建一个从0开始的数字索引。如果ignore_index设置为False(这是默认值),Pandas会尝试将data_dict中的索引与现有的DataFrame索引合并,这可能会导致索引的重复,特别是如果现有DataFrame和data_dict中的索引值有重叠的情况。

四.concat()方法将字典转换为 DataFrame 行

# 使用列表包含所有要添加的字典
import pandas as pd

data_dict = {'Column1': 'Value1', 'Column2': 'Value2', 'Column3': 'Value3'}

dict_df = pd.DataFrame([data_dict])

# Now, create an example existing DataFrame to concatenate with.
existing_df = pd.DataFrame({
    'Column1': ['ExistingValue1', 'ExistingValue2'],
    'Column2': ['ExistingValue3', 'ExistingValue4'],
    'Column3': ['ExistingValue5', 'ExistingValue6']
})

concatenated_df = pd.concat([existing_df, dict_df], ignore_index=True)

# Display the concatenated DataFrame
concatenated_df

        Column1	        Column2	       Column3
0	ExistingValue1	ExistingValue3	ExistingValue5
1	ExistingValue2	ExistingValue4	ExistingValue6
2	    Value1	         Value2     	Value3

上下拼接(沿着索引拼接,即添加行):axis 参数的值应为 0 或 ‘index’(这是默认值)。ignore_index 如果设置为 True,则会重置索引。
左右拼接(沿着列拼接,即添加列):axis 参数的值应为 1 或 ‘columns’。
在这种情况下,通常不需要设置 ignore_index,因为你是在添加列,而不是在重新排列行索引。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值