Pandas DataFrame括号[]更喜欢列还是行?

时间:2016-04-30 19:09:23

标签: python pandas dataframe

我对the documentation中的这个例子感到好奇/困惑:

  

选择一个列,产生一个系列,相当于df.A

In [23]: df['A']  
Out[23]:   
2013-01-01    0.469112  
2013-01-02    1.212112

  

通过[]选择,对行进行切片。

In [24]: df[0:3]  
Out[24]:   
                   A         B         C         D  
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632  
2013-01-02  1.212112 -0.173215  0.119209 -1.044236  
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804  

我不清楚第一个访问者如何知道"选择列,第二个知道选择行。这对我来说有点烦人,因为我也希望按索引访问列。

3 个答案:

答案 0 :(得分:3)

[]的主要用途是访问列。但是,当您传递切片时,它为slices the rows

  

使用DataFrame,在[]内部切片会对行进行切片。这是提供的   很大程度上是为了方便,因为它是如此常见的操作。

要按整数索引访问列,您需要使用.iloc。例如,要访问位置2和3的列,您将使用df.iloc[:, 2:4]。请注意,这是基于列的位置。您可能有名为2和3的列,但如果它们不在这些位置,则不会选择它们。如果您想按标签选择,则可以使用.loc。例如,如果您想要获得B到D列:df.loc[:, "B":"D"]。与整数切片不同,这也将为您提供D列。有关详细信息:http://pandas.pydata.org/pandas-docs/stable/indexing.html

答案 1 :(得分:2)

如果要逐个数字地选择,则不能使用单个括号:

 df = pd.DataFrame({'a':[1,2,5], 'b':[3,4,6]})

In [260]: df[:,1]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-260-ff65926f441e> in <module>()
----> 1 df[:,1]

您需要使用iloc按号码选择列:

In [262]: df.iloc[:,1]
Out[262]:
0    3
1    4
2    6
Name: b, dtype: int64

对于两个行切片和按数字选择列,请使用iloc

In [263]: df.iloc[0:2,1]
Out[263]:
0    3
1    4
Name: b, dtype: int64

对于按名称切片和选择列的两行,请使用loc

In [267]: df.loc[0:2,'a']
Out[267]:
0    1
1    2
2    5
Name: a, dtype: int64

希望这有助于使用不同的约定进行切片/选择。

答案 2 :(得分:1)

使用df['col_name']语法时,您正在访问行。当您使用new_df1 = df[ df['col_name'] == 5 ] new_df2 = df[ df['col_name'] >= 7 ] new_df3 = df[ df['col_name'].isin(list_of_values) ] 语法时,您正在访问列。

如果您只想显示与给定值匹配的行:

{{1}}

希望这可以为您节省几个小时的文档。