pandas 选择数据框中包含特定UUID的行[重复]

mspsb9vt  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(150)

此问题在此处已有答案

filtering a dataframe with uuids returns an empty result(3个答案)
4天前关闭。
我有一个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()
)

预览:

df

-------     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作为匹配条件选择行?

b1zrtrql

b1zrtrql1#

Pandas显示列的类型为object,但我注意到,拉取特定行的值显示pandas将标识符作为UUID而不是简单的字符串:

df.iloc[0]['d']

------- UUID('31abc2af-117d-4fe8-b43f-e68fa429187f')

我找不到这个问题的答案,但在尝试了各种方法后,我发现需要以下方法:

df.loc[
    df['d'] == uuid.UUID('31abc2af-117d-4fe8-b43f-e68fa429187f')
]
pvabu6sv

pvabu6sv2#

我看到你找到了解决问题的方法。另一种方法是将列值转换为字符串:
df.loc[df['d'].astype(str) == '31abc2af-117d-4fe8-b43f-e68fa429187f']

相关问题