开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十九天,点击查看活动详情
总结:此文为12月更文计划第十九天第三十四篇。 、 昨天学习了pandas的索引,今天开始学习对齐运算
对齐运算
1.series的对齐运算
对齐运算:两个阶数不相同的series相加或者其他运算,一个阶数小,一个阶数大,如果在运算的时候会进行补值运算,填补一个Nan值:
import pandas as pd
s1 = pd.Series(range(10, 20), index = range(10))
s2 = pd.Series(range(20, 25), index = range(5))
# Series 对齐运算
print(s1)
print('-'*50)
print(s2)
print('-'*50)
print('s1+s2: ')
s1的列数是多于s2的,在相加的过程中,多出的值全部赋值为了Nan:
如果要单独取一个值:
print(s3[6])
可以看到取出的结果为nan
np其实为了对齐专门提供了一个接口:
print(s1.add(s2, fill_value = 0))
可以将nan的值全部赋值为0,此时相加的话就会显示多余列对应的数值:
以上就为series的对齐运算。
2.dataFrame的对齐运算: dataFrame的对齐运算与series的对齐运算相同:
import numpy as np
df1 = pd.DataFrame(np.ones((2,2)), columns = ['a', 'b'])
print(df1)
df2 = pd.DataFrame(np.ones((3,3)), columns = ['a', 'b', 'c'])
print(df2)
print(df2.dtypes)
print(df1-df2)
print(df1.sub(df2, fill_value = 2)) #未对齐的数据将和填充值做运算
对于其对齐运算,如果有多的值直接赋值为nan,也可以使用接口将缺少的值赋值为0,输出的结果如下:
pd的函数学习
1.取最大值:
print(df.apply(lambda x : x.max()))
取一行的最大值:
print(df.apply(lambda x : x.max(), axis=1))
输出的结果如下:
df = pd.DataFrame(np.random.randn(5,4)-1)
print(df)
print('-'*50)
print(df.apply(lambda x : x.max()))
print('-'*50)
print(df.apply(lambda x : x.max(), axis=1))
applymap可以引用到这个array的所有数据:
print(df.applymap(lambda x : '%.2f' % x))
输出的结果如下:
2.pd的索引排序: series:
print(np.random.randint(5, size=5))
s4 = pd.Series(range(10, 15), index = np.random.randint(5, size=5))
print(s4)
print(s4.sort_index())
print(s4)
使用sort_index()来对索引进行排序:
dataFrame:
df4 = pd.DataFrame(np.random.randn(5, 5),
index=np.random.randint(5, size=5),
columns=np.random.randint(5, size=5))
print(df4)
#轴零是行索引排序
df4_isort = df4.sort_index(axis=0, ascending=False)
print(df4_isort)
#轴1是列索引排序
df4_isort = df4.sort_index(axis=1, ascending=False)
print(df4_isort)
输出的结果如下: