我df中的一列存储了一个列表,而某些raws列表中有空项目。例如:
[]
[“ X”,“ Y”]
[]
等...
如何只能获取列表不为空的原始文件?
以下代码不起作用。
df[df["col"] != []] # ValueError: Lengths must match to compare
df[pd.notnull(df["col"])] # The code doesn't issue an error but the result includes an empty list
df[len(df["col"]) != 0] # KeyError: True
答案 0 :(得分:4)
尝试一下:
df[df['col'].apply(len).gt(0)]
答案 1 :(得分:3)
您可以这样做:
df[df["col"].str.len() != 0]
示例:
import pandas as pd
df = pd.DataFrame({"col": [[1], [2, 3], [], [4, 5, 6], []]}, dtype=object)
print(df[df["col"].str.len() != 0])
# col
# 0 [1]
# 1 [2, 3]
# 3 [4, 5, 6]
答案 2 :(得分:3)
这可能是最有效的解决方案。
df[df["col"].astype(bool)]
答案 3 :(得分:1)
bool
布尔上下文中的空列表为False
。空列表就是我们所说的虚假信息。程序员很容易知道哪些对象是假的和真实的。
您还可以对具有布尔列表(不仅仅是布尔序列)的数据框进行切片。因此,我将使用一种理解方法来加快检查速度。
df[[bool(x) for x in df.col]]
或者字符更少
df[[*map(bool, df.col)]]
答案 4 :(得分:0)
您可以使用str.len()检查列表是否为空,然后取反:
df[df["col"].str.len() != 0]
...
str.len
用于返回对象长度的Python内置函数。
您的输出应该是预期的。