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

时间:2020-07-04 00:49:11

标签: python pandas

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 个答案:

答案 0 :(得分:2)

您可以在explode之前

df1=df.explode('y')
df1.loc[df1.x=='b','y'].tolist()
... 
[3, 4]

也很简单

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

答案 1 :(得分:2)

您的import java.util.*; import java.lang.*; import java.io.*; import static java.util.List.of; class Ideone { public static void main (String[] args) throws java.lang.Exception { List<String> A = of("a", "ah", "A", "ay"); List<String> B = of("B", "b", "bee", "Bea"); List<String> C = of("sea", "Cee", "C++", "c", "Si", "C#"); List<String> D = of("D", "d", "dee", "Di", "Dee-Dee Ramone", "Sunny D"); List<Number> N1 = of(777); List<Number> N2 = of(-93.11D); List<Number> N3 = of(867.5f); List<Number> N4 = of(-309L); List<String>[] litzs = toArray(A, B, C, D); List<Number>[] nzs = toArray(N1, N2, N3, N4); /*...use them however...*/ } private static <T> List<T>[] toArray(List<T> ... lists){ return lists; } } 表达式返回一个序列而不是标量,您只需要选择其第一个也是唯一一个元素:

loc

答案 2 :(得分:1)

如果您要获取单个单元格值,请尝试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”不存在,它将返回不正确的结果。

答案 3 :(得分:0)

尝试locsqueeze

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