如何在DataFrame中筛选包含指定UUID的行?
问题:如何通过UUID筛选Pandas DataFrame的行?
我创建了一个Pandas DataFrame,其中一列存储UUID:
import numpy as np import pandas as pd import uuid df = pd.DataFrame( data=[[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'] ) df['d'] = np.NaN df['d'] = df['d'].apply( lambda x: uuid.uuid4() )
DataFrame预览结果:
------- a b c d ------- 0 1 2 3 31abc2af-117d-4fe8-b43f-e68fa429187f ------- 1 4 5 6 f63b36c8-bb4e-4148-ace9-a89fa117e15c
尝试用以下代码根据UUID筛选行时,返回空行集:
df.loc[ df['d'] == '31abc2af-117d-4fe8-b43f-e68fa429187f' ]
原因分析
uuid.uuid4()生成的是UUID对象,而非字符串类型。直接用字符串和UUID对象做相等比较,结果永远是False,因此筛选不到任何行。
解决方案
有两种可行的处理方式:
方式1:生成UUID时直接转为字符串
在创建DataFrame的UUID列时,把生成的UUID对象转为字符串,后续筛选直接用字符串匹配即可:
import numpy as np import pandas as pd import uuid df = pd.DataFrame( data=[[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'] ) df['d'] = df['d'].apply(lambda x: str(uuid.uuid4())) # 转为字符串 # 筛选代码正常工作 df.loc[df['d'] == '31abc2af-117d-4fe8-b43f-e68fa429187f']
方式2:筛选时将字符串转为UUID对象
如果DataFrame的UUID列已经是UUID对象类型,可将目标字符串转为UUID对象后再进行比较:
import uuid target_uuid = uuid.UUID('31abc2af-117d-4fe8-b43f-e68fa429187f') result = df.loc[df['d'] == target_uuid]
内容的提问来源于stack exchange,提问作者philipnye
相关产品推荐
相关产品推荐

