import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(0,60,2).reshape(10,3),columns=list('abc'))
print(df)
df得到的数据是
a b c 0 0 2 4 1 6 8 10 2 12 14 16 3 18 20 22 4 24 26 28 5 30 32 34 6 36 38 40 7 42 44 46 8 48 50 52 9 54 56 58
可以根据每列的索引采用.loc来获取每一列的值,例如df['b']就是取的索引为b的这一列,df['b']的结果如下:
0 2 1 8 2 14 3 20 4 26 5 32 6 38 7 44 8 50 9 56 Name: b, dtype: int32
还可以通过每一行的索引和列的索引,把需要的行和列单独取出来.loc主要是针对字符串的,当索引是字符串那么就用.loc,如果索引是数字,
那么就是用.iloc。其实两者的功能差不多,下面举一些.
df.loc[0, 'a']#求得只是第一行第一列的数字输出:0df.loc[0:3, ['a', 'b']]#取出0,1,2,3行的a,b两列, #如果只取一列那么就这样写df.loc[0:3, 'a'] #如果取多列,那么要把列用[]放在一起如df.loc[0:3, ['a', 'b']]
输出: a b 0 0 2 1 6 8 2 12 14 3 18 20
输出:#不想抽取连续的行和列,那么就需要用[]把要取的行和列都列出来 #如下 df.loc[[1, 5], ['b', 'c']]与df.loc[[1, 5]][['b', 'c']]一个意思,顺带提一下,有的书里面会出现这种格式,很难查到资料,所以在此记录一下
b c 1 8 10 5 32 34
如果我们嫌column name太长了,输入不方便,有或者index是一列时间序列,更不好输入,那就可以选择 .iloc了。这边的 i 我觉得代表index,比较好记点。
输出:df.iloc[1,1]
输出:8
df.iloc[0:3, [0,1]]
输出:
.iloc让行列切片成为可能,很方便a b 0 0 2 1 6 8 2 12 14 3 18 20
df.iloc[[0, 3, 5], 0:2] #补充一下使用切片的列表不包含最后一个数,所以列只取0,1列
输出:
a b 0 0 2 3 18 20 5 30 32
df.iloc[:, :]#取出所有的行和列 df.loc[:][:]#与上面一回事
输出:
a b c 0 0 2 4 1 6 8 10 2 12 14 16 3 18 20 22 4 24 26 28 5 30 32 34 6 36 38 40 7 42 44 46 8 48 50 52 9 54 56 58
还有一种就是如下的格式,意思是取出df中第a列中元素等于6的那一行的b列和c列
df.loc[df['a'] == 6][['b', 'c']]
b c 1 8 10