pd.merge 不指定关联的列, 但空单元格不能当成相同的值,空值视为不匹配, 应该怎么做?
时间: 2024-09-23 11:10:03 浏览: 8
当使用pandas库中的`pd.merge()`函数合并数据框时,如果不想手动指定关联列,并且希望将空值(NaN)视为不匹配,你可以设置`how='left'`或`how='right'`,这会保留左表或右表的所有行,对缺失值进行填充。但是,如果你想直接忽略空值,可以考虑使用`merge`函数的`indicator=True`选项,这样会在结果中添加一个新的布尔列`_merge`,标识哪些记录来自源数据框(True),哪些是新加入的(False),包括那些由于不匹配而填充的NaN。
例如:
```python
merged_df = pd.merge(left_df, right_df, on=None, how='left', indicator=True)
```
在这个例子中,如果你想要只保留左边数据框(left_df)并且忽略右边数据框中的缺失值,可以在后续筛选掉 `_merge` 列中标记为 'right_only' 的行:
```python
filtered_df = merged_df[merged_df['_merge'] != 'right_only']
```
相关问题
pd.merge 不指定关联的列, 但空单元格不能当成相同的值,应该怎么做?
当你在Pandas DataFrame中合并数据,如果不想指定具体的列作为连接键(merge key),但是又希望忽略空值(NaN)被视为不匹配,你可以使用 `how='outer'` 和 `indicator=True` 参数,这会返回一个包含所有可能组合的新DataFrame,同时有一个名为 `_merge` 的列指示了每一对行是如何连接的。
例如:
```python
import pandas as pd
left = pd.DataFrame({'A': ['foo', 'bar', np.nan], 'B': ['one', 'one', 'two']})
right = pd.DataFrame({'A': ['foo', np.nan, 'baz'], 'B': ['one', 'three', 'one']})
merged = pd.merge(left, right, how='outer', indicator=True)
print(merged)
```
输出结果会有 `_merge` 列,它的值可能是 `'left_only'`, `'right_only'`, 或 `'both'`,分别表示左表独有的记录、右表独有的记录以及两边都有的记录。对于那些只出现在一边而另一边为空的记录,它们的关联被认为是不匹配的。