python - 如何在 pandas 的列上合并 2 个数据框
问题描述
我在合并熊猫中的两个数据框时遇到问题。它们是在两个文件之间拆分的数据集的一部分,它们共享一些列和值,即“名称”和“地址”。具有相同值的条目不与另一个文件中的条目共享它们的索引。我尝试了以下行的变体:
res = pd.merge(df, df_p, on=['name', 'address'], how="left")
当 how 参数设置为“左”时,来自 df_p 的列没有值。'right' 有相反的效果,df 的列是空的。'inner' 导致一个空的数据框,'outer' 复制了条目的数量,本质上只是附加了 'left' 和 'right' 的结果。
我手动验证了两个文件中的“名称”和“地址”值的组合相同。
编辑:尝试合并其中一个列似乎是成功的,但是我想避免合并不正确的条目,以防两个同名的人有不同的地址,反之亦然
Edit1:这里有一些关于数据集的更多信息。
df.info() 输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3983 entries, 0 to 3982
Data columns (total 23 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 3983 non-null int64
1 name 3983 non-null object
2 address 3983 non-null object
3 race 3970 non-null object
4 marital-status 3967 non-null object
5 occupation 3971 non-null object
6 pregnant 3969 non-null object
7 education-num 3965 non-null float64
8 relationship 3968 non-null object
9 skewness_glucose 3972 non-null float64
10 mean_glucose 3572 non-null float64
11 capital-gain 3972 non-null float64
12 kurtosis_glucose 3970 non-null float64
13 education 3968 non-null object
14 fnlwgt 3968 non-null float64
15 class 3969 non-null float64
16 std_glucose 3965 non-null float64
17 income 3974 non-null object
18 medical_info 3968 non-null object
19 native-country 3711 non-null object
20 hours-per-week 3971 non-null float64
21 capital-loss 3969 non-null float64
22 workclass 3968 non-null object
dtypes: float64(10), int64(1), object(12)
memory usage: 715.8+ KB
来自 df 的示例条目:
0,Curtis Brown,"32266 Byrd Island
Fowlertown, DC 84201", White, Married-civ-spouse, Exec-managerial,f,9.0, Husband,1.904881822,79.484375,15024.0,0.667177618, HS-grad,147707.0,0.0,39.49544760000001, >50K,"{'mean_oxygen':'1.501672241','std_oxygen':'13.33605383','kurtosis_oxygen':'11.36579476','skewness_oxygen':'156.77910559999995'}", United-States,60.0,0.0, Private
df_p.info() 输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3933 entries, 0 to 3932
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 3933 non-null int64
1 name 3933 non-null object
2 address 3933 non-null object
3 age 3933 non-null int64
4 sex 3933 non-null object
5 date_of_birth 3933 non-null object
dtypes: int64(2), object(4)
memory usage: 184.5+ KB
来自 df_p 的示例条目:
2273,Curtis Brown,"32266 Byrd Island
Fowlertown, DC 84201",44, Male,1975-03-26
如您所见,所选样本是针对同一个人的,但它们的索引不匹配,这就是我尝试使用名称和地址列的原因。
Edit2:在合并中更改 df 和 df_p 的顺序似乎已经解决了这个问题,尽管我不知道为什么。
解决方案
推荐阅读
- python - 具有粘性的线程池执行器
- typescript - 枚举键上的打字稿条件类型
- php - Cron 在时隙之间每 5 秒运行一次 PHP 脚本
- c# - unity显示最佳时间
- typescript - Webpack 5 中用 Typescript 编写的 Web Worker:SyntaxError: Cannot use import statement outside a module
- google-sheets - 仅将文本添加到第一列
- python - Pytorch迁移学习错误:张量a(16)的大小必须与非单维2的张量b(128)的大小相匹配
- python-3.x - Plotly 在 PowerPoint 中的输出
- python - 如何在散景图上添加 1W、1M、MTD、1Q、1H、1Y、YTD 范围按钮
- go - Go 中嵌入类型的 String() 方法的奇怪行为