例:
obj = pd.Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
a -5.3
b 7.2
c 3.6
d 4.5
e NaN
dtype: float64
obj3 = pd.Series(['bule', 'purple', 'yellow'], index=[0, 2, 4])
obj3.reindex(range(6), method='ffill')
0 bule
1 bule
2 purple
3 purple
4 yellow
5 yellow
dtype: object
注:bfill向后填充,ffill向前填充
数据框名.reindex(索引数组,method)
数据框名.reindex(columns=索引数组,method)
frame.loc[行索引,列索引]
对于series,drop会返回一个新的object,并删去指定的axis的值
obj = pd.Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])
new_obj = obj.drop('c')
#若要删除多个,则可以将索引写在数组里
a 0.0
b 1.0
d 3.0
e 4.0
dtype: float64
对于DataFrame,能按行或列的axis来删除
语法:
#按照行删除
数据框名.drop(单个label|label序列)
#按照列删除
数据框名.drop(单个label|label序列, axis=1|axis='columns')
例:直接删除表中第二,四列数据
data = pd.DataFrame(np.arange(16).reshape(4, 4),
index=['Ohio', 'Colorado', 'Utah', 'New York'],
columns=['one', 'two', 'three', 'four'])
data.drop(['two', 'four'], axis='columns', inplace=True)
与python比较:
例:提取第二个元素
obj['b']
obj[1]
例:提取大于2 的元素
obj[obj >2]
data[data['three'] > 5]
#筛选出第三列元素大于5的数据
data<5
#可以得到一个逻辑值数据框
data[data < 5] = 0
#可以将所有小于5的数据变成0
data[:2]
#选择前两行
data[[:2]]
#选择前两列
data[['three', 'one']]
#选择第三、一列
loc and iloc是种特别的索引符. 这两个方法能通过axis labels(loc)或integer(iloc),来选择行或列,用法和上面一样;除此之外还可以同时筛选行和列
data
one two three four
Ohio 0 0 0 0
Colorado 0 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
data.loc['Colorado', ['two', 'three']]
two 5
three 6
Name: Colorado, dtype: int32
data.iloc[2, [3, 0, 1]]
four 11
one 8
two 9
Name: Utah, dtype: int32
data.loc[:'Utah', 'two']
data.iloc[:, :3][data.three > 5] #在选出前三列(0,1,2)的基础上,筛选第三列值大于5的行
ser = pd.Series(np.arange(3.))
ser
0 0.0
1 1.0
2 2.0
dtype: float64
ser[-1] #报错
所以若要避免这类问题最好用非整数做索引,避免歧义。
不同index的obejct之间的算术计算。如果两个object相加,但他们各自的index并不相同,最后结果得到的index是这两个index的合集:即index相同的照常进行计算,不同的就看做值+NaN=NaN
例:
s1 = pd.Series([7.3, -2.5, 3.4, 1.5], index=['a', 'c', 'd', 'e'])
s2 = pd.Series([2.1, 3.6, -1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g'])
s1+s2
a 9.4
c 1.1
d NaN
e 0.0
f NaN
g NaN
dtype: float64
frame = pd.DataFrame(np.arange(12.).reshape((4, 3)),
columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
series = frame.iloc[0]
frame - series
b d e
Utah 0.0 0.0 0.0
Ohio 3.0 3.0 3.0
Texas 6.0 6.0 6.0
Oregon 9.0 9.0 9.0
上述算术中,series的列与frame的列相匹配,从而计算结果是frame的每一行都减了一次series
series1 = frame['d']
frame.sub(series1, axis='index')