在List中选择Pandas DataFrame Column值的所有行

时间:2018-01-17 15:42:53

标签: python pandas dataframe

我正在解决这些问题几个小时,我无法获得正确的结果。

我有一个如下所示的DataFrame:

def summaryStatistics(col: TraversableOnce[Long]): LongSummaryStatistics = {
  col.aggregate(new LongSummaryStatistics)((stat, el) => {
    stat.accept(el)
    stat
  }, (s1, s2) => {
    s1.combine(s2)
    s1
  })
}

List = [1,3,5]

我想要做的是选择列表中Col4值的df中的所有行。

我希望结果是:

df:
Col1 Col2 Col3 Col4
aaa  bbb  ccc  1
aaa  bbb  ccc  2
aaa  bbb  ccc  3
aaa  bbb  ccc  4
aaa  bbb  ccc  5

我的代码如下所示:

new_df:
Col1 Col2 Col3 Col4
aaa  bbb  ccc  1
aaa  bbb  ccc  3
aaa  bbb  ccc  5

我的输出/错误是:

new_df = df[df['Col4'].isin(List)]

我是python3和Pandas的新手。任何帮助和提示都是适用的。谢谢你提前......

1 个答案:

答案 0 :(得分:0)

由于不清楚dtype是什么(我非常怀疑它是整数类型),所以你可以使用pd.Series.infer_dtypesv0.22中的新内容)并过滤结果。

m = df.Col4.infer_objects().isin([1, 3, 5])
m

0     True
1    False
2     True
3    False
4     True
Name: Col4, dtype: bool

df[m]

  Col1 Col2 Col3  Col4
0  aaa  bbb  ccc     1
2  aaa  bbb  ccc     3
4  aaa  bbb  ccc     5

如果你想坚持老式的做法,总会有astype

df[df.Col4.astype(int).isin([1, 3, 5])]

或者,如果不起作用,请使用to_numeric;

df[pd.to_numeric(df.Col4, errors='coerce').isin([1, 3, 5])]

  Col1 Col2 Col3  Col4
0  aaa  bbb  ccc     1
2  aaa  bbb  ccc     3
4  aaa  bbb  ccc     5