繁体   English   中英

如何访问字典列表中的值,该列表是 oneliner 中 dataframe 中的一列

[英]How to access values from lists of dictionary which is a column in dataframe in oneliner

假设我有 dataframe

     col1                      col2  col3
0  [{'a': 1, 'b': 1, 'c': 1}]  1     2 
1  [{'a': 2, 'b': 2, 'c': 1}]  2     3
2  [{'a': 3, 'b': 1, 'c': 2}]  4     1

我可以通过以下方式获得过滤后的 dataframe:

filtered_df = df.iloc[:,[0,2]]

返回

      col1                        col3
 0  [{'a': 1, 'b': 1, 'c': 1}]     2
 1  [{'a': 2, 'b': 2, 'c': 1}]     3
 2  [{'a': 3, 'b': 1, 'c': 2}]     1

如果我必须访问字典列表中“c”的值 - 我可以单独遍历 col1 并附加到列表/字典。 但是我正在寻找一种能够获得 output 的pythonic方法,如下所示:

     c   col3
 0   1     2
 1   1     3
 2   2     1

使用str索引 select 第一个列表,然后 select c通过Series.str.get

df['c'] = df['col1'].str[0].str.get('c')
print (df)
                         col1  col2  col3  c
0  [{'a': 1, 'b': 1, 'c': 1}]     1     2  1
1  [{'a': 2, 'b': 2, 'c': 1}]     2     3  1
2  [{'a': 3, 'b': 1, 'c': 2}]     4     1  2

如果需要第一个列表中的所有列,请通过构造函数创建DataFrame ,还添加DataFrame.pop以删除原始列col1 (如有必要):

df = df.join(pd.DataFrame(df.pop('col1').str[0].tolist(), index=df.index))
print (df)
   col2  col3  a  b  c
0     1     2  1  1  1
1     2     3  2  2  1
2     4     1  3  1  2

使用df.apply另一个解决方案:

df['c'] = df.apply(lambda x: x[0][0].get('c'), axis=1)

Output:

     c   col3
 0   1     2
 1   1     3
 2   2     1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM