dataframe 条件取非,在大熊猫DataFrame中获取非空元素

I have a DataFrame and I want to get some non-null elements as a list.

Specifically, given df:

df = pd.DataFrame({"a":["A",None,"B"],"b":[None,"C","D"],"c":["E","F",None]})

a b c

0 A None E

1 None C F

2 B D None

and the interesting columns list ["a","c"], I want to extract the list of non-None element of the specified columns, i.e.,

["A","B","E","F"]

I guess I can do

[value for colname in interesting_columns

for value in df.loc[df[colname].notnull(),colname]]

but I was wondering if there is some non-iterative magic trick.

解决方案

You can stack it to long format and retrieve the data with .values accessor. By default, stack() drops missing values automatically:

df[['a', 'c']].T.stack().values

# array(['A', 'B', 'E', 'F'], dtype=object)

Or if you want a list:

df[['a', 'c']].T.stack().tolist()

# ['A', 'B', 'E', 'F']

T is needed to get the values in the order you requested.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值