Python 从数据帧中获取特定行作为序列

Python 从数据帧中获取特定行作为序列,python,pandas,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 df[df["location"] == "c"

如何将特定的筛选行作为序列获取

数据帧示例:

>>> df = pd.DataFrame({'date': [20130101, 20130101, 20130102], 'location': ['a', 'a', 'c']})
>>> df
       date location
0  20130101        a
1  20130101        a
2  20130102        c
df[df["location"] == "c"].squeeze()
Out[5]: 
date        20130102
location           c
Name: 2, dtype: object
我需要选择
位置
c
的行作为一个系列

我试过:

row = df[df["location"] == "c"].head(1)  # gives a dataframe
row = df.ix[df["location"] == "c"]       # also gives a dataframe with single row
在这两种情况下,我都无法将行作为序列进行排序。

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

>>> df = pd.DataFrame({'date': [20130101, 20130101, 20130102], 'location': ['a', 'a', 'c']})
>>> df
       date location
0  20130101        a
1  20130101        a
2  20130102        c
df[df["location"] == "c"].squeeze()
Out[5]: 
date        20130102
location           c
Name: 2, dtype: object
DataFrame.squese
方法在设置为
True
时,与
read\u csv
函数的
squese
参数的作用相同:如果生成的数据帧是一个1-len数据帧,即它只有一个维度(一列或一行),则对象被压缩到更小维度的对象

在本例中,您从数据帧获得一个Series对象。如果将面板压缩到数据帧,同样的逻辑也适用

挤压在您的代码中是明确的,它清楚地表明了您想要“放下”手中的对象的意图,因为它的维度可以投影到更小的维度


如果数据帧有多个列或行,则压缩无效。

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


谢谢Boud,这真是个奇迹
df[df[“location”]==“c”]。挤压()也可以正常工作。你能解释一下挤压的作用吗?“挤压长度1维”意味着它将1行结果转换为系列?@Pratyush I更新了上述答案。我建议您调用挤压,因为您希望从1D数据帧中获取一个序列,这比仅为强制转换目的调用iloc[0]更显式。不知道哪一个更好,但像pythonic一样挤压:)+1用于解释当resultin数据帧有多行时iloc otoh更好如果您有多行,那么你的df是2D而不是1D,所以你不能压缩它。这里的答案适用于任何一般情况,但不能处理重要的角落情况。可以在中找到更多信息。请务必注意,如果要在此处指定新行,此答案不起作用:
df[df[“location”]==“c”]。iloc[0]=pd.Series({'location':'d','date':np.nan})
将失败。正确的方法是调用单个切片器一次。我添加了一个解决方案。