1

我有一个多行 4 列的数据框。每列包含一个包含 100 个值的数组。

我这样做的直观方式与使用多维 numpy 数组的方式相同。

例如,我想要column1. 所以我说

df["column1"][:][0]

对我来说这是有道理的:首先选择列,然后获取每个数组,然后获取每个数组的第一个元素。

但是,它根本不起作用。相反,它只是从第 1 行吐出整个数组column1

但是 - 这是最令人沮丧的事情 - 如果我说:

df["column1"][1][0]

根据我的预期逻辑,它完全符合我的预期,例如,我在column1.

如何获取每个数组中的每个第 n 个元素column1

4

2 回答 2

2

df["column1"][:][0]没有做你期望的原因是df["column1"][:]返回一个系列。对于系列,使用括号索引返回该索引处的系列项目。

如果您想要一个系列,其中系列中的每个项目都是该索引处相应数组中的项目,那么正确的解决方案(无论是否直观)是.str[...]在系列上使用。

代替

df["column1"][:][0]

用这个:

df["column1"].str[0]

看起来.str应该只用于实际str值,但一个巧妙的技巧是也适用于列表。

于 2021-11-16T22:12:05.117 回答
1

这里有一些方法可以做到这一点:

[item[0] for item in df['column1']]  # will result in a list

或者

df['column1'].apply(lambda item: item[0])  # will result in a series

不确定您是否正在寻找类似于切片的方法,但 AFAIU pandas 认为您表中的列表只是任意对象,而不是 pandas 提供的糖。

当然,您可以通过在列中创建数据框来做其他花哨的事情:

pd.DataFrame(df['column1'].tolist())

然后用它做任何你想做的事。

于 2021-11-16T22:19:40.367 回答