Pandas模块 04
<title>test_pandas</title>
</div>
</div>
</div>
</body>
**pandas第二部分:**[Pandas模块05](https://www.cnblogs.com/zhangchaocoming/p/11625767.html)
In [6]:
import numpy as np
为啥使用numpy¶
计算购物车的总价格¶
In [15]:
l1=[2,3,10,5]
l2=[10,200,150,50]
In [8]:
l1_np = np.array(l1)
l2_np = np.array(l2)
In [9]:
l1_np
Out[9]:
In [10]:
l2_np
Out[10]:
In [11]:
l1_np * l2_np
Out[11]:
In [13]:
np.sum(l1_np * l2_np)
Out[13]:
In [14]:
import numpy as np
import pandas as pd
Series的学习¶
Series的创建方法¶
In [17]:
s1 = pd.Series([2,3,4,5,6])
In [18]:
s1
Out[18]:
In [19]:
s2 = pd.Series([2,3,4,5,6],index=['a','b','c','d','e'])
In [20]:
s2
Out[20]:
索引取值¶
In [21]:
s1[1]
Out[21]:
In [22]:
s2['b']
Out[22]:
In [23]:
s2[1] ##### 数字型索引和自定义索引是共存的
Out[23]:
In [24]:
s4 = pd.Series(0,index=['a','b','c'])
s4
Out[24]:
Series的特性¶
In [26]:
s1 * 2 #### 矢量运算
Out[26]:
In [28]:
s3 = pd.Series([2,3,4,5,6])
s3
Out[28]:
In [29]:
s1 * s3
Out[29]:
In [30]:
s1>4
Out[30]:
In [31]:
s1[s1>4] #### 布尔型索引
Out[31]:
In [32]:
abs(s1)
Out[32]:
In [34]:
sum(s1) #### 求和
Out[34]:
缺失值处理¶
In [35]:
st = pd.Series({'sean':12, 'yang':15, 'cloud':20, 'bella':23}) #### 放字典也可以
st
Out[35]:
In [37]:
obj1 = pd.Series(st, index=['sean', 'yang', 'cloud'])
obj1
Out[37]:
In [39]:
obj2 = pd.Series(st, index=['sean', 'yang', 'cloud', 'rocky'])
obj2
Out[39]:
In [41]:
#### 为啥值的类型从整型变成了浮点型?
### 答:因为NaN是浮点类型,所以为了兼容nan的浮点类型,因此强制的将之前的整型变成了浮点型
type(np.nan)
Out[41]:
In [42]:
#### nan 他等于谁?
np.nan == np.nan
Out[42]:
In [45]:
#### 使用fillna()方法填充nan
obj2.fillna("好")
Out[45]:
In [46]:
obj2 ### obj2在使用fillna()时相当于又重新copy了一份
Out[46]:
In [47]:
a = obj2
a
Out[47]:
In [48]:
#### 删除nan所在的行
obj2.dropna(inplace=True) ### inplace = True:代表对象本身的基础上删掉
In [49]:
obj2
Out[49]:
In [51]:
#### isnull 判断是否为空
obj2.isnull()
Out[51]:
两个Series的运算¶
In [52]:
#### 向量运算
In [53]:
s4 = pd.Series({'height':170, 'age':18, 'salary':2000})
s4
Out[53]:
In [54]:
s5 = pd.Series({'height':110, 'age':20, 'salary':2367})
s5
Out[54]:
In [55]:
s4 +s5 #### 索引所对应的值进行加减乘除
Out[55]:
In [57]:
s6 = pd.Series({'name':110, 'age':20, 'salary':2367})
s6
Out[57]:
In [58]:
s4 + s6
Out[58]:
In [59]:
s1
Out[59]:
Series索引¶
In [62]:
#### 获取 2, 4, 6三个值
#### 花式索引 中括号中套中括号 ,内层中括号写索引下标
s1[[0,2,4]]
Out[62]:
In [63]:
arr = np.array([1,2,3,4,5])
In [64]:
arr
Out[64]:
In [65]:
arr[[0,2,4]]
Out[65]:
整数索引¶
In [68]:
sr = pd.Series(np.arange(10))
sr
Out[68]:
In [71]:
sr1 = sr[3:]
sr1
Out[71]:
In [73]:
sr1.iloc[0] #### iloc == index + location
Out[73]:
In [75]:
sr1.loc[3] #### 下标
Out[75]:
DataFrame¶
In [76]:
df = pd.DataFrame({'one':[1,2,3,4],'two':[5,6,7,8]})
df
Out[76]:
In [77]:
df['one'].iloc[0] #### 先是获取列 再然后是行
Out[77]:
常见的属性¶
In [78]:
df.index #### 获取行索引
Out[78]:
In [79]:
df.columns #### 获取列索引
Out[79]:
In [80]:
df.T #### 行列转置
Out[80]:
In [81]:
df.values
Out[81]:
In [83]:
df['one'].values[0]
Out[83]:
In [85]:
df.describe()
Out[85]:
企业中处理数据的方式¶
In [86]:
#### 1. 别的同事会给你一个excel文件或者csv文件
#### 2. 使用pandas读取csv文件
In [87]:
movies = pd.read_csv('./douban_movie.csv') ### 只需要read_csv函数, 将csv中的所有数据读出
movies
Out[87]:
In [89]:
movies.describe()
Out[89]:
In [98]:
movies.to_csv('./modify_movies.csv',index=False) #### 保存数据到一个文件中 index=False表示不要在列名称前加索引。
In [99]:
pd.read_csv('./modify_movies.csv')
Out[99]:
In [100]:
movies.head() #### 默认显示前5行, head中可以传入行数,查看
Out[100]:
In [102]:
movies.head(2) #### 指定数字2,表示显示两行
Out[102]:
In [103]:
movies.tail() #### 默认显示后5行, tail中也可以传入行数查看
Out[103]:
DataFrame的分组¶
In [104]:
#### 读取某一个url网页下面的所有的表格数据
res = pd.read_html('https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')
In [107]:
champion_res = res[0]
In [108]:
champion_res
Out[108]:
In [109]:
##### 1.将第一行数据变成列名
champion_res.iloc[0]
Out[109]:
In [110]:
champion_res.columns = champion_res.iloc[0] ### 将第一行的数据赋值给列名
In [112]:
champion_res.head()
Out[112]:
In [113]:
champion_res.drop([0],inplace=True)
In [114]:
champion_res
Out[114]:
In [116]:
#### 1.求每个队获取冠军的次数
#####思路:对冠军球队进行分组 mysql: group by 分组对象
champion_res.groupby('冠军') #### 获取的是一个分组对象
Out[116]:
In [117]:
champion_res.groupby('冠军').groups #### 拿到每支队伍获取冠军的行索引
Out[117]:
In [118]:
#### 2.对数据进行聚合 mysql: count sum
champion_res.groupby('冠军').size() #### 获取每支队伍获得冠军的次数
Out[118]:
In [119]:
#### 3. 对数据进行排序 mysql: order by
champion_res.groupby('冠军').size().sort_values(ascending=False) ### 默认是升序排序
Out[119]:
浙公网安备 33010602011771号