Python 如何根据其他数据帧计算数据帧中缺少的值
我希望找到数据帧中的值,而不是另一个数据帧中的值。 例如,我有这样一个数据帧:Python 如何根据其他数据帧计算数据帧中缺少的值,python,pandas,Python,Pandas,我希望找到数据帧中的值,而不是另一个数据帧中的值。 例如,我有这样一个数据帧: |---------------------| | Col1 | |---------------------| | 1111 | |---------------------| | 2222 | |---------------------| | 3333 | |-----------------
|---------------------|
| Col1 |
|---------------------|
| 1111 |
|---------------------|
| 2222 |
|---------------------|
| 3333 |
|---------------------|
| 4444 |
|---------------------|
| 5555 |
|---------------------|
| 6666 |
|---------------------|
| 7777 |
|---------------------|
|---------------------|
| Col2 |
|---------------------|
| 1111 |
|---------------------|
| 2222 |
|---------------------|
| 3333 |
|---------------------|
| 4444 |
|---------------------|
另一个数据帧如下所示:
|---------------------|
| Col1 |
|---------------------|
| 1111 |
|---------------------|
| 2222 |
|---------------------|
| 3333 |
|---------------------|
| 4444 |
|---------------------|
| 5555 |
|---------------------|
| 6666 |
|---------------------|
| 7777 |
|---------------------|
|---------------------|
| Col2 |
|---------------------|
| 1111 |
|---------------------|
| 2222 |
|---------------------|
| 3333 |
|---------------------|
| 4444 |
|---------------------|
我想要这样的结果
|---------------------|
| missing values |
|---------------------|
| 5555 |
|---------------------|
| 6666 |
|---------------------|
| 7777 |
|---------------------|
编辑
错误:
Traceback (most recent call last):
File "C:/Users/haroo501/PycharmProjects/tool_check_nbr/my_missing_result.py", line 16, in <module>
merged = esn_datafeed_df.merge(esn_inter_intra_merge_df, how='left', indicator=True)
File "C:\Users\haroo501\PycharmProjects\tool_check_nbr\venv\lib\site-packages\pandas\core\frame.py", line 7336, in merge
return merge(
File "C:\Users\haroo501\PycharmProjects\tool_check_nbr\venv\lib\site-packages\pandas\core\reshape\merge.py", line 83, in merge
return op.get_result()
File "C:\Users\haroo501\PycharmProjects\tool_check_nbr\venv\lib\site-packages\pandas\core\reshape\merge.py", line 642, in get_result
join_index, left_indexer, right_indexer = self._get_join_info()
File "C:\Users\haroo501\PycharmProjects\tool_check_nbr\venv\lib\site-packages\pandas\core\reshape\merge.py", line 859, in _get_join_info
(left_indexer, right_indexer) = self._get_join_indexers()
File "C:\Users\haroo501\PycharmProjects\tool_check_nbr\venv\lib\site-packages\pandas\core\reshape\merge.py", line 837, in _get_join_indexers
return _get_join_indexers(
File "C:\Users\haroo501\PycharmProjects\tool_check_nbr\venv\lib\site-packages\pandas\core\reshape\merge.py", line 1320, in _get_join_indexers
return join_func(lkey, rkey, count, **kwargs)
File "pandas/_libs/join.pyx", line 97, in pandas._libs.join.left_outer_join
MemoryError: Unable to allocate 298. MiB for an array with shape (39003243,) and data type int64
回溯(最近一次呼叫最后一次):
文件“C:/Users/haroo501/PycharmProjects/tool_check_nbr/my_missing_result.py”,第16行,在
合并=esn_数据源_df.merge(esn_inter_intra_merge_df,how='left',indicator=True)
文件“C:\Users\haroo501\PycharmProjects\tool\u check\u nbr\venv\lib\site packages\pandas\core\frame.py”,第7336行,合并
返回合并(
文件“C:\Users\haroo501\PycharmProjects\tool\u check\u nbr\venv\lib\site packages\pandas\core\reforme\merge.py”,第83行,合并中
返回操作获取结果()
文件“C:\Users\haroo501\PycharmProjects\tool\u check\u nbr\venv\lib\site packages\pandas\core\remode\merge.py”,第642行,在get\u result中
加入索引,左索引器,右索引器=self.\u获取加入信息()
文件“C:\Users\haroo501\PycharmProjects\tool\u check\u nbr\venv\lib\site packages\pandas\core\remode\merge.py”,第859行,在获取加入信息中
(左索引器、右索引器)=self.\u获取\u加入\u索引器()
文件“C:\Users\haroo501\PycharmProjects\tool\u check\u nbr\venv\lib\site packages\pandas\core\remode\merge.py”,第837行,在获取加入索引器中
返回\u获取\u加入\u索引器(
文件“C:\Users\haroo501\PycharmProjects\tool\u check\u nbr\venv\lib\site packages\pandas\core\remode\merge.py”,第1320行,在获取加入索引器中
返回连接函数(lkey、rkey、count、**kwargs)
文件“pandas/_libs/join.pyx”,第97行,在pandas._libs.join.left_outer_join中
MemoryError:无法为形状为(39003243,)且数据类型为int64的数组分配298.MiB
我怎样才能解决这个问题?
希望有人能帮助我解决这个问题。您正在寻找一个左连接。您可以使用Pandas中的函数
merge
来实现这一点。使用indicator=True
可以让您看到哪些值仅在一个数据帧中(由指示符变量'LEFT\u only'
标识),这正是您所寻找的
>>> df1 = pd.DataFrame([1, 2, 3, 4, 5, 6], columns=["my_column"])
>>> df2 = pd.DataFrame([1, 2, 3], columns=["my_column"])
>>> merged = df1.merge(df2, how="left", indicator=True)
>>> merged.query("_merge == 'left_only'")[["my_column"]]
my_column
3 4
4 5
5 6
您正在寻找左联接。可以使用Pandas中的函数
merge
来完成此操作。使用indicator=True
可以查看哪些值仅存在于一个数据帧中(由指示符变量'LEFT_only'
标识),这正是您所寻找的
>>> df1 = pd.DataFrame([1, 2, 3, 4, 5, 6], columns=["my_column"])
>>> df2 = pd.DataFrame([1, 2, 3], columns=["my_column"])
>>> merged = df1.merge(df2, how="left", indicator=True)
>>> merged.query("_merge == 'left_only'")[["my_column"]]
my_column
3 4
4 5
5 6
欢迎使用堆栈溢出。请提供您的输入示例因此,我们可以更好地理解您的问题。请检查此问题:它与您的问题相关:。基本上,“Exception”函数满足您的要求-但SPARK中提供了Exception函数。您需要在python中找到等效函数。@User9102d82感谢您的支持,我尝试使用fo设置索引lowing code
result=esn\u datafeed\u df[~esn\u datafeed\u df.set\u index('st\umts\u df\u relationship\u key')。isin(esn\u inter\u intra\u merge\u df.set\u index('st\umts\u esn\u inter\u inter\u relationship\u key')))。dropna()
并发现此错误AttributeError:“tuple”对象没有属性“set\u index”
`@G.Anderson您的意思是添加表来解释它?@G.Anderson您能检查一下编辑器吗欢迎使用堆栈溢出。请提供您的输入示例因此,我们可以更好地理解您的问题。请检查此问题:它与您的问题相关:。基本上,“Exception”函数满足您的要求-但SPARK中提供了Exception函数。您需要在python中找到等效函数。@User9102d82感谢您的支持,我尝试使用fo设置索引lowing coderesult=esn\u datafeed\u df[~esn\u datafeed\u df.set\u index('st\umts\u df\u relationship\u key')。isin(esn\u inter\u intra\u merge\u df.set\u index('st\umts\u esn\u inter\u inter\u relationship\u key')))。dropna()
并发现此错误AttributeError:“tuple”对象没有属性“set\u index”
`@G.Anderson您的意思是添加表来解释它?@G.Anderson您能检查一下edit吗我想这对我也适用result=esn\u datafeed\u df[~esn\u datafeed\u df.set\u index(list(esn\u datafeed\u df.st\u umts\u relationship\u key)).index.isin(esn_inter_intra_merge_df.set_index(list(esn_inter_intra_merge_df.st_umts_esn_inter_intra relationship_key)).index)
这很难阅读。使用简单的变量名,如df1
,df2
,将使你的下一个问题变得更容易:)。顺便说一句,一个问题可以有多个有效答案。你知道这个错误吗?TypeError:只能合并序列或数据帧对象,a已传递
,你能检查我的编辑吗?当然。你忘了调用函数pd.read\u sql()
当定义esn\u inter\u intra\u merge\u df时
应该是:esn\u inter\u intra\u merge\u df=pd.read\u sql('SELECT*FROM[myDB].[dbo].[esn\u inter\u intra\u merge]',engine)
Ops很抱歉,我没有处理这个问题…:D我更改了它…但我发现了另一个错误:(MemoryError:无法为具有形状(39003243,)和数据类型int64的数组分配298.MiB
我认为这也适用于我(esn_inter_intra_merge_df.st_umts_esn_inter_intra_relationship_key)).index)这很难阅读。使用简单的变量名,如df1
,df2
将使下一个问题变得更容易:)。顺便说一句,一个问题可以有多个有效答案。你知道这个错误吗?TypeError:只能合并序列或数据帧对象,a已传递
,你能检查我的编辑吗?当然。你忘了调用函数pd.read\u sql()
当定义esn\u inter\u intra\u merge\u df
时,应该是:esn\u inter\u intra\u merge\u df=pd.read\u sql('SELECT*FROM[myDB].[dbo].[esn\u inter\u intra\u merge]',engine)
Ops我很抱歉我没有注意到这一点…:D我更改了它…但是我没有