我对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
我不清楚第一个访问者如何知道"选择列,第二个知道选择行。这对我来说有点烦人,因为我也希望按索引访问列。
答案 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}}
希望这可以为您节省几个小时的文档。