wos*_*tom 3 python dataframe pandas
我有这种pandas Datamframe命名为df:
email | list
___________________________
email1@email.com | [0,1]
email1@email.com | [2,1]
email1@email.com | [0,3]
email1@email.com | [0,0]
email1@email.com | [0,1]
Run Code Online (Sandbox Code Playgroud)
我想从具有0列表的df中检索所有行:[0,0]
我正在做:
df2 = df[df['list'] == [0,0]]
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
ValueError: Arrays were different lengths: 5 vs 2
Run Code Online (Sandbox Code Playgroud)
这不起作用的原因:
df2 = df[df['list'] == [0, 0]]
Run Code Online (Sandbox Code Playgroud)
是因为df ['list']是一个5元素长的列表,并且[0, 0]是一个两元素长列表.它在评估你的面具时失败了
df['list'] == [0, 0]
Run Code Online (Sandbox Code Playgroud)
我相信解决这个问题的最快方法是在数据帧的长度上创建一系列[0,0]元素,并将此系列与列进行比较
df['list'] == pd.Series([[0, 0]] * len(df))
0 False
1 False
2 False
3 True
4 False
Run Code Online (Sandbox Code Playgroud)
这由每个比较创建的掩模元件在列表中[0, 0]而不是比较列表 df['list']以[0, 0]
使用此掩码,您可以创建新的数据帧
mask = df['list'] == pd.Series([[0, 0]] * len(df))
df2 = df[mask]
Run Code Online (Sandbox Code Playgroud)