为了账号安全,请及时绑定邮箱和手机立即绑定

从熊猫数据框中提取非嵌套列表

从熊猫数据框中提取非嵌套列表

互换的青春 2023-02-15 16:05:09
df = pd.DataFrame({'x':['a','b','c','d'],'y':[[1],[3,4],[2],[5]]})我想提取列表[3,4]所以我做了df.loc[df.x=='b','y'].tolist()但它返回一个嵌套列表。[[3,4]]如何从数据框中获取非嵌套列表?
查看完整描述

4 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

你的loc表达式返回一个序列而不是一个标量,你只需要选择它的第一个也是唯一的元素:

df.loc[df.x=='b','y'].iloc[0]


查看完整回答
反对 回复 2023-02-15
?
侃侃无极

TA贡献2051条经验 获得超10个赞

你可以explode先


df1=df.explode('y')

df1.loc[df1.x=='b','y'].tolist()

... 

[3, 4]

也很简单修复


df.loc[df.x=='b','y']

[3, 4]


查看完整回答
反对 回复 2023-02-15
?
暮色呼如

TA贡献1853条经验 获得超9个赞

如果您尝试获取单个单元格值,请尝试df.at,它保证单个值:

df.at[pd.Index(df['x']).get_loc('b'), 'y']
# [3, 4]

如果密钥不存在,此解决方案肯定会失败:

df.at[pd.Index(df['x']).get_loc('xyz'), 'y']
# KeyError: 'xyz'

pd.Index(df['x']).get_loc('b')表达式也可以替换为df['x'].eq(b).argmax(),但请注意,如果“b”不存在,它将返回不正确的结果。


查看完整回答
反对 回复 2023-02-15
?
动漫人物

TA贡献1815条经验 获得超10个赞

尝试locsqueeze

In [621]: df.loc[df.x=='b','y'].squeeze()
Out[621]: [3, 4]


查看完整回答
反对 回复 2023-02-15
  • 4 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信