我正在解决这些问题几个小时,我无法获得正确的结果。
我有一个如下所示的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的新手。任何帮助和提示都是适用的。谢谢你提前......
答案 0 :(得分:0)
由于不清楚dtype
是什么(我非常怀疑它是整数类型),所以你可以使用pd.Series.infer_dtypes
(v0.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