python - python问题与列表的熊猫数据框
问题描述
我有一个 Pandas 数据框,其中每一行都是一个列表。
我想搜索一个值,但出现错误。我知道我的价值是存在的。
我检查这个:
df["text list"][1] == ['رهبری']
并得到:
True
那么我需要这个:
df[df["text list"] == ['رهبری']]
并得到这个错误:
ValueError Traceback (most recent call last)
<ipython-input-42-f14f1b2306ec> in <module>
----> 1 df[df["text list"] == ['رهبری']]
~/.local/lib/python3.6/site-packages/pandas/core/ops/__init__.py in wrapper(self, other, axis)
1205 # as it will broadcast
1206 if other.ndim != 0 and len(self) != len(other):
-> 1207 raise ValueError("Lengths must match to compare")
1208
1209 res_values = na_op(self.values, np.asarray(other))
ValueError: Lengths must match to compare
解决方案
当您将列表直接传递给 DataFrame 进行比较时,它需要一个大小相同的数组来进行元素比较。
为避免这种情况,apply
如果列表存在,我们可以使用检查每一行:
# example dataframe
>>> df = pd.DataFrame({'text list':[['aaa'], ['bbb'], ['ccc']]})
>>> df
text list
0 [aaa]
1 [bbb]
2 [ccc]
用于Series.apply
检查[bbb]
:
>>> m = df['text list'].apply(lambda x: x == ['bbb'])
>>> df[m]
text list
1 [bbb]
由于我们使用apply
的基本上是后台的“循环”实现。我们可以避免使用 pandas 的开销并使用列表推导:
>>> m = [x == ['bbb'] for x in df['text list']]
>>> df[m]
text list
1 [bbb]
推荐阅读
- c# - 如何单独添加服务?
- r - 如何在 R 中的行记录选择中编写多个 if/else if 条件
- postgresql - 有条件的情况下使用 case 时的语法错误
- sql - 将表连接在一起
- python - 来自 DB 文件值的 Django URL 路径
- css - 从 x px / x% width count from left to y px / y % count from right 开始 CSS 效果
- docusignapi - 如何暂停从模板创建的文档信封?
- google-sheets-formula - google sheet vlookup from another sheet (same doc) #N/A
- electron - 如何与电子中本机`window.open`打开的子窗口共享相同的分区?
- python - Pandas Groupby 获得最多多列但按顺序排列