1

我有一个数据框df_data和一个列表l_ids。如下df_data.head()所示:

在此处输入图像描述

并且l_lids[:5][224960004, 60032008, 26677001, 162213003, 72405004]

我想获取l_id列表中存在的行l_ids

所以我这样做:df_temp = df_data[df_data.isin(l_ids)]

但是,df_temp其中有包含NaN的行。实际上,text所有行的字段都是NaN。如下df_temp.head()所示:

在此处输入图像描述

交叉检查:

print(79823003 in l_ids, 224960004 in l_ids)
True, True

尽我们所能l_ids[0]is 224960004which is present indf_temp但它现在是 a float,对应text的是NaN。与79823003其他 id 相同。

为什么会这样?我过去也遇到过同样的错误,但我通过其他一些方式得到了行并忽略了错误。但是现在它再次发生在一个不相关的项目中,我觉得我在这里犯了某种错误。

额外信息

df_data.info()返回:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 3577942 entries, 0 to 6953898
Data columns (total 2 columns):
text       object
l_id    int64
dtypes: int64(1), object(1)

df_temp.info()返回:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 3577942 entries, 0 to 6953898
Data columns (total 2 columns):
text       object
l_id    float64
dtypes: float64(1), object(1)

因此l_id字段的数据类型从更改int64float64

4

2 回答 2

1

你的陈述应该是这样的:

df_temp = df_data[df_data['l_id'].isin(l_ids)]

l_id如果列的值存在于列表中,这将检查每一行,l_ids并返回条件为真的相应行。您的错误是调用isin()整个数据框df_data而不是仅调用 column df_data['l_id']

于 2020-06-24T15:37:54.240 回答
0

解决问题的另一种方法:

import pandas as pd

df = pd.DataFrame({
    'text': ['aa', 'bb', 'cc', 'dd'],
    'l_id': [1, 2, 3, 4],
})

ids = [2, 3]

df[df.apply(lambda x: x['l_id'] in ids, axis=1)]
于 2020-06-24T17:09:29.327 回答