从pandas dataframe获取特定行作为系列

Pra*_*ush 43 python pandas

我们如何将特定的过滤行作为系列?

示例数据帧:

>>> df = pd.DataFrame({'date': [20130101, 20130101, 20130102], 'location': ['a', 'a', 'c']})
>>> df
       date location
0  20130101        a
1  20130101        a
2  20130102        c
Run Code Online (Sandbox Code Playgroud)

我需要选择该行,其中locationc 一系列.

我试过了:

row = df[df["location"] == "c"].head(1)  # gives a dataframe
row = df.ix[df["location"] == "c"]       # also gives a dataframe with single row
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,我都不能将该行作为系列.

Bou*_*oud 65

使用squeeze将从数据框中删除一个维度的函数:

df[df["location"] == "c"].squeeze()
Out[5]: 
date        20130102
location           c
Name: 2, dtype: object
Run Code Online (Sandbox Code Playgroud)

DataFrame.squeeze当设置为:时,方法的作用方式squeezeread_csv函数的参数相同True:如果结果数据帧是1-len数据帧,即它只有一个维度(列或行),则对象被压缩到较小的维度宾语.

在您的情况下,您从DataFrame获得一个Series对象.如果将Panel压缩到DataFrame,则适用相同的逻辑.

挤压在您的代码中是明确的,并清楚地显示您的意图"抛弃"手中的对象,因为它的尺寸可以投影到较小的尺寸.

如果数据框有多个列或行,则squeeze无效.

  • 不知道哪个更好,但像 pythonic 一样挤压 :) +1 解释 (2认同)

Rom*_*kar 15

您可以使用整数索引(iloc()函数)获取第一行:

>>> df[df["location"] == "c"].iloc[0]
date        20130102
location           c
Name: 2, dtype: object
Run Code Online (Sandbox Code Playgroud)