gpt4 book ai didi

python - 按细胞类型过滤 Pandas 数据框

转载 作者:行者123 更新时间:2023-11-28 18:13:26 25 4
gpt4 key购买 nike

我有一个从 openstreetmap 数据生成的地理数据框。我对其中一列有疑问,它返回 objectdtype,包含字符串和列表的混合,如 highway下面的专栏。

    access geometry                                         highway
0 NaN LINESTRING (-10817.60510122531 6680340.0880667... footway
1 no LINESTRING (-11843.46986863073 6678698.1663396... footway
2 no LINESTRING (-11843.46986863073 6678698.1663396... [footway, steps]
3 no LINESTRING (-11843.46986863073 6678698.1663396... footway
4 NaN LINESTRING (-9727.497855683101 6679963.0804682... unclassified

我正在尝试获取 highway 列的唯一值,但是 unique() 函数返回一个 TypeError: unhashable type: 'list' 错误。我明白为什么会发生这种情况,但我不确定如何真正获得独特的值(value)。我正在考虑按单元格 dtype 过滤数据框,比如

dfMultitags = df[type(df['highway']) == type(list()]

但我似乎也找不到办法做到这一点。欢迎任何想法。

编辑:这个问题更多地与包含不规则列表的 pandas 列有关,解决方案来自 Group operations on Pandas column containing lists不要在这里整齐地申请。答案是将列表转换为元组。就我而言,这会导致以下结果:

0                      (f, o, o, t, w, a, y)
1 (f, o, o, t, w, a, y)
2 (footway, steps)
3 (f, o, o, t, w, a, y)
4 (u, n, c, l, a, s, s, i, f, i, e, d)
5 (u, n, c, l, a, s, s, i, f, i, e, d)
6 (f, o, o, t, w, a, y)

理想情况下,我想将初始数据帧拆分为两个数据帧,一个包含所有 list 类型的单元格,另一个包含所有具有 str 值的单元格。

最佳答案

您可以使用 apply() 仅将列表转换为元组,而其余部分保持不变,然后调用 unique():

In [15]: df = pd.DataFrame({'highway': ['footway', 'footway', ['footway', 'steps'], 'footway', 'unclassified']})

In [16]: df['highway'].apply(lambda x: tuple(x) if isinstance(x, list) else x).unique()
Out[16]: array(['footway', ('footway', 'steps'), 'unclassified'], dtype=object)

如果您将 tuple() 应用于整个列,它会将字符串转换为每个字符的元组。

关于python - 按细胞类型过滤 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49944381/

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