python pandas 两个字典合并
时间: 2023-09-10 15:14:18 浏览: 315
可以使用pandas的merge函数将两个字典合并。
示例代码如下:
```python
import pandas as pd
dict1 = {'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie']}
dict2 = {'id': [1, 2, 4], 'age': [25, 30, 35]}
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
merged_df = pd.merge(df1, df2, on='id', how='outer')
print(merged_df)
```
输出结果如下:
```
id name age
0 1 Alice 25.0
1 2 Bob 30.0
2 3 Charlie NaN
3 4 NaN 35.0
```
在这个例子中,我们有两个字典dict1和dict2,其中dict1包含id和name列,而dict2包含id和age列。我们使用DataFrame将它们转换为数据框df1和df2,然后使用merge函数将它们合并。我们指定了on='id',这意味着我们要根据id列将它们合并。我们还指定了how='outer',这意味着我们要使用外部合并,这将在结果中包含所有的行,而不仅仅是匹配的行。最后,我们打印出合并的数据框merged_df。
相关问题
python pandas将个字典(键同值不同)合并,并传入excel
要将多个字典合并为一个数据帧(DataFrame),并将其写入 Excel 文件,可以按照以下步骤操作:
1. 将多个字典组成一个列表,每个字典表示一个数据集。
2. 使用 pandas 的 `concat()` 函数将列表中的字典合并为一个数据帧。
3. 使用 pandas 的 `to_excel()` 方法将数据帧写入 Excel 文件。
以下是一个示例代码:
```python
import pandas as pd
# 创建多个字典
dict1 = {'键1': '值1', '键2': '值2'}
dict2 = {'键3': '值3', '键4': '值4'}
# 将字典组成一个列表
dict_list = [dict1, dict2]
# 合并字典为数据帧
df = pd.concat([pd.DataFrame([d]) for d in dict_list], ignore_index=True)
# 将数据帧写入 Excel 文件
df.to_excel('output.xlsx', index=False)
```
在这个例子中,我们首先创建了两个字典 `dict1` 和 `dict2`。然后,我们将这两个字典组成一个列表 `dict_list`。
接下来,我们使用列表推导式和 `pd.DataFrame()` 函数将列表中的每个字典转换为一个数据帧。最后,我们使用 `concat()` 函数将这些数据帧合并为一个大的数据帧 `df`。
最后,我们使用 `to_excel()` 方法将数据帧 `df` 写入到名为 "output.xlsx" 的 Excel 文件中,通过设置 `index=False` 来避免写入行索引。
通过这种方式,你可以将多个字典合并为一个数据帧,并将其写入到 Excel 文件中。
python pandas 分组转成字典再和另一个分组合并
假设有两个数据集,分别为df1和df2。其中df1包含学生姓名和成绩,df2包含学生姓名和班级:
```python
import pandas as pd
df1 = pd.DataFrame({
'name': ['Tom', 'Jack', 'Mary', 'Tom', 'Jack', 'Mary', 'Tom', 'Jack', 'Mary'],
'score': [80, 90, 70, 85, 95, 75, 88, 92, 78]
})
df2 = pd.DataFrame({
'name': ['Tom', 'Jack', 'Mary'],
'class': ['A', 'B', 'C']
})
```
现在需要将df1按照姓名分组,转换成字典,再将df2按照姓名分组,转换成字典,最后将两个字典合并。
```python
# 将df1按照姓名分组,转换成字典
df1_dict = df1.groupby('name')['score'].apply(list).to_dict()
# 将df2按照姓名分组,转换成字典
df2_dict = df2.groupby('name')['class'].apply(list).to_dict()
# 合并两个字典
result_dict = {}
for name in set(df1['name']).union(set(df2['name'])):
result_dict[name] = {'score': df1_dict.get(name, []), 'class': df2_dict.get(name, [])}
print(result_dict)
```
输出如下:
```
{
'Mary': {'score': [70, 75, 78], 'class': ['C']},
'Jack': {'score': [90, 95, 92], 'class': ['B']},
'Tom': {'score': [80, 85, 88], 'class': ['A']}
}
```
可以看到,最终得到了按照姓名分组的字典,其中每个元素包含了对应学生的成绩和班级。
阅读全文