通常,按如下方式过滤pandas Dataframe:
import pandas as pd
df = pd.read_csv(...)
df_filtered = df[df['column'] == value]
我有以下数据框df1
:
numbers letters other_columns
0 [A] ....
1 [A] ....
2 [C] ....
3 [B] ....
4 [B] ....
5 [A] ....
... ....
我认为letters
中的条目是字符串,但实际上是列表:
type(df1.letters.ix[0])
输出list
因此,我尝试将数据框df1
过滤为只有[A]
行。
only_A
应该是这样的:
numbers letters other_columns
0 [A] ....
1 [A] ....
5 [A] ....
... ....
但是,如果我尝试使用代码
进行过滤only_A = df1[df1['letters'] == list('A')]
我收到错误,ValueError
ValueError: Arrays were different lengths: 3076 vs 1
过滤此数据框的正确方法是什么?
答案 0 :(得分:2)
如果您认为字母的内容是字符串,您可以将列的列转换为字符串吗?像这样的东西:
df['letters'] = df['letters'].apply(lambda x: ''.join(x))
然后像往常一样进行过滤
答案 1 :(得分:2)
您可以使用Series.str.join
进行过滤,而无需更改DataFrame。
df[df['letters'].str.join('') == 'A']