如何在Pandas中按数字获取列?

dbf7pr2w  于 2022-11-05  发布在  其他
关注(0)|答案(6)|浏览(138)

有什么区别:

Maand['P_Sanyo_Gesloten']
Out[119]: 
Time
2012-08-01 00:00:11    0
2012-08-01 00:05:10    0
2012-08-01 00:10:11    0
2012-08-01 00:20:10    0
2012-08-01 00:25:10    0
2012-08-01 00:30:09    0
2012-08-01 00:40:10    0
2012-08-01 00:50:09    0
2012-08-01 01:05:10    0
2012-08-01 01:10:10    0
2012-08-01 01:15:10    0
2012-08-01 01:25:10    0
2012-08-01 01:30:10    0
2012-08-01 01:35:09    0
2012-08-01 01:40:10    0
...
2012-08-30 22:35:09    0
2012-08-30 22:45:10    0
2012-08-30 22:50:09    0
2012-08-30 22:55:10    0
2012-08-30 23:00:09    0
2012-08-30 23:05:10    0
2012-08-30 23:10:09    0
2012-08-30 23:15:10    0
2012-08-30 23:20:09    0
2012-08-30 23:25:10    0
2012-08-30 23:35:09    0
2012-08-30 23:40:10    0
2012-08-30 23:45:09    0
2012-08-30 23:50:10    0
2012-08-30 23:55:11    0
Name: P_Sanyo_Gesloten, Length: 7413, dtype: int64

还有

Maand[[1]]
Out[120]: 
&ltclass 'pandas.core.frame.DataFrame'&gt
DatetimeIndex: 7413 entries, 2012-08-01 00:00:11 to 2012-08-30 23:55:11
Data columns (total 1 columns):
P_Sanyo_Gesloten    7413  non-null values
dtypes: int64(1)

如何通过索引号而不是索引字符串来获取列?

7hiiyaii

7hiiyaii1#

一个是列(也称为Series),而另一个是DataFrame:

In [1]: df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])

In [2]: df
Out[2]:
   a  b
0  1  2
1  3  4

列'B'(又称数列):

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

[1]中包含列(位置)的子 Dataframe :

In [4]: df[[1]]
Out[4]:
   b
0  2
1  4

注意:最好(并且不那么模糊)指定您是在谈论列名(例如['b'])还是整数位置,因为有时您可以将列命名为整数:

In [5]: df.iloc[:, [1]]
Out[5]:
   b
0  2
1  4

In [6]: df.loc[:, ['b']]
Out[6]:
   b
0  2
1  4

In [7]: df.loc[:, 'b']
Out[7]:
0    2
1    4
Name: b, dtype: int64
qc6wkl3g

qc6wkl3g2#

另一种方法是使用columns数组选择列:

In [5]: df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])

In [6]: df
Out[6]: 
   a  b
0  1  2
1  3  4

In [7]: df[df.columns[0]]
Out[7]: 
0    1
1    3
Name: a, dtype: int64
z4bn682m

z4bn682m3#

以下内容摘自http://pandas.pydata.org/pandas-docs/dev/indexing.html。还有一些示例......您需要向下滚动一点

In [816]: df1

           0         2         4         6
0   0.569605  0.875906 -2.211372  0.974466
2  -2.006747 -0.410001 -0.078638  0.545952
4  -1.219217 -1.226825  0.769804 -1.281247
6  -0.727707 -0.121306 -0.097883  0.695775
8   0.341734  0.959726 -1.110336 -0.619976
10  0.149748 -0.732339  0.687738  0.176444

通过整数切片选择

In [817]: df1.iloc[:3]

          0         2         4         6
0  0.569605  0.875906 -2.211372  0.974466
2 -2.006747 -0.410001 -0.078638  0.545952
4 -1.219217 -1.226825  0.769804 -1.281247

In [818]: df1.iloc[1:5,2:4]

          4         6
2 -0.078638  0.545952
4  0.769804 -1.281247
6 -0.097883  0.695775
8 -1.110336 -0.619976

通过整数列表选择

In [819]: df1.iloc[[1,3,5],[1,3]]

           2         6
2  -0.410001  0.545952
6  -0.121306  0.695775
10 -0.732339  0.176444
6yjfywim

6yjfywim4#

按编号访问列的另一种方法是使用Map字典,其中的键是列名,值是列编号

dates = pd.date_range('1/1/2000', periods=8)

df = pd.DataFrame(np.random.randn(8, 4),
   index=dates, columns=['A', 'B', 'C', 'D'])
print(df)
dct={'A':0,'B':1,'C':2,'D':3}
columns=df.columns

print(df.iloc[:,dct['D']])
nwsw7zdq

nwsw7zdq5#

您还可以使用take按位置获取任何列:

In [2]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])

In [3]: df
Out[3]: 
   a  b
0  1  2
1  3  4

In [4]: df.take([1], axis=1)
Out[4]: 
   b
0  2
1  4
cxfofazt

cxfofazt6#

为了将Jeff的评论形式化为答案,这是我所知道的最简单的方法,它比Andy H的prior answer简单,后者使用了一个列表。

my_col = df.iloc[:, column_index]

第一列使用0,第二列使用1,依此类推。例如:

first_col = df.iloc[:, 0]

另外,如果目标是遍历列,则df.items()就足够了。

相关问题