gpt4 book ai didi

python - 如何在 pandas DataFrame 中查找与正则表达式匹配的实际唯一值

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:03 30 4
gpt4 key购买 nike

我有一个包含超过一百万行的 pandas DataFrame,我需要在尝试标准化数据的过程中找到所有唯一值(对于给定列)。给定列中的数据是字符串类型 - 代表城市名称 - 通过采取某些步骤将列中的所有值小写、 strip 化并使用 pandas.core.frame.DataFrame.replace() ,我在数据标准化方面已经取得了很大的进展。使用对数据来说似乎显而易见的正则表达式。

下面是我所拥有的(以及我想要实现的)示例:

In [1018]: sample
Out[1018]:
0
0 warsaw ## -> warsaw
1 krakow ## -> krakow
2 warszawa ## -> warsaw
3 cracovie ## -> krakow
4 warsawa ## -> warsaw
5 krkow ## -> krakow
6 krąków ## -> krakow
7 krakowie ## -> krakow
8 kraków ## -> krakow
9 varşovia ## -> warsaw
10 warschau ## -> warsaw

只有比这大得多的数据集,因此我需要使用正则表达式搜索不同城市名称的变体,以便找到数据集中现有的所有版本并继续标准化。

In [1023]: df.column_a.unique()
Out[1023]:
array(['warsaw', 'bydgoszcz', 'null', ..., 'kłodawa', 'kościelna wieś',
'poznań-jeżyce'], dtype=object)

In [1024]: len(df.column_a.unique())
Out[1024]: 3798

我尝试过.str.contains()但我只得到一个 bool 值,用于那些在定义的列下具有与给定正则表达式匹配的值的索引:

In [1029]: df.column_a.str.contains(r"\bwar.*")
Out[1029]:
0 True
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 False
9 False
10 False
...

但是,我正在寻找的是获取与给定正则表达式匹配的实际值。对于上面的例子,我希望能够得到类似的东西:

['warsaw','warszawa','warsawa','warschau']

最佳答案

使用 bool 索引——引用document

   In [143] df[df.column_a.str.contains(r'\bwar.*')]
Out [143]
0 warsaw
2 warszawa
4 warsawa
10 warschau

如果存在空值,则执行以下操作:

df[pd.notnull(df.column_a) & df.column_a.str.contains(r'\bwar.*')]

关于python - 如何在 pandas DataFrame 中查找与正则表达式匹配的实际唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36503453/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com