Python数据分析,必须要求掌握Pandas大熊猫

我写的pandas不是我国可爱的大熊猫国宝

成都创新互联公司公司2013年成立,先为玉州等服务建站,玉州等地企业,进行企业商务咨询服务。为玉州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

[[322948]]

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

1.pandas数据结构的介绍

  • Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
  • Time- Series:以时间为索引的Series。
  • DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
  • Panel :三维的数组,可以理解为DataFrame的容器。

2.Series的操作

2.1 对象创建 2.1.1 直接创建2.1.2 字典创建

 
 
 
  1. import pandas as pd 
  2. import numpy as np 
  3. # 直接创建 
  4. s = pd.Series(np.random.randn(5), index=['a','b','c','d','e']) 
  5. print(s)  
  6. # 字典(dict)类型数据创建 
  7. s = pd.Series( {'a':10, 'b':20, 'c':30}, index=['b', 'c', 'a', 'd']) 
  8.  
  9. OUT: 
  10. a   -0.620323 
  11. b   -0.189133 
  12. c    1.677690 
  13. d   -1.480348 
  14. e   -0.539061 
  15. dtype: float64 
  16.  
  17. OUT: 
  18. a    10 
  19. b    20 
  20. c    30 
  21. dtype: int64 

2.2 查看数据 切片、索引、dict操作 Series既然是一维数组类型的数据结构,那么它支持想数组那样去操作它。通过数组下标索引、切片都可以去操作他,且它的data可以是dict类型的,那么它肯定也就支持字典的索引方式。

 
 
 
  1. import pandas as pd 
  2. import numpy as np 
  3.  
  4. s = pd.Series(np.random.randn(5), index=['a','b','c','d','e']) 
  5.  
  6. print(s) 
  7.  
  8. # 下标索引 
  9. print('下标索引方式s[0] = : %s' % s[0]) 
  10.  
  11. # 字典访问方式 
  12. print('字典访问方式s[b] = :%s' % s['b']) 
  13.  
  14. # 切片操作 
  15. print('切片操作s[2:]\n:%s' % s[2:]) 
  16. print('a' in s) 
  17. print('k' in s) 
  18. OUT: 
  19. a   -0.799676 
  20. b   -1.581704 
  21. c   -1.240885 
  22. d    0.623757 
  23. e   -0.234417 
  24. dtype: float64 
  25.  
  26. 下标索引方式s[0] = : -0.799676067487 
  27. 字典访问方式s[b] = :-1.58170351838 
  28. 切片操作s[2:]: 
  29. c   -1.240885 
  30. d    0.623757 
  31. e   -0.234417 
  32. True 
  33. False 

2.3 Series的算术操作

 
 
 
  1. import pandas as pd 
  2. import numpy as np 
  3.  
  4. s1 = pd.Series(np.random.randn(3), index=['a','b','c']) 
  5.  
  6. s2 = pd.Series(np.random.randn(3), index=['a','b','c']) 
  7. print(s1+s2) 
  8. print(s1-s2) 
  9. print(s1*s2) 
  10. print(s1/s2) 
  11. OUT: 
  12. a    0.236514 
  13. b   -0.132153 
  14. c    0.203186 
  15. dtype: float64 
  16.  
  17. a    0.305397 
  18. b   -1.474441 
  19. c   -1.697982 
  20. dtype: float64 
  21.  
  22. a   -0.009332 
  23. b   -0.539128 
  24. c   -0.710465 
  25. dtype: float64 
  26.  
  27. a   -7.867120 
  28. b   -1.196907 
  29. c   -0.786252 
  30. dtype: float64 

3.dataframe的操作

3.1 对象创建

 
 
 
  1. In [70]:  data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 20 
  2.     ...: 02, 2001, 2002],'pop': [1.5, 1.7, 3.6, 2.4, 2.9]} 
  3. In [71]: data 
  4. Out[71]:  
  5. {'pop': [1.5, 1.7, 3.6, 2.4, 2.9], 
  6.  'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 
  7.  'year': [2000, 2001, 2002, 2001, 2002]} 
  8. # 建立DataFrame对象 
  9. In [72]: frame1 = DataFrame(data) 
  10. # 红色部分为自动生成的索引 
  11. In [73]: frame1 
  12. Out[73]:  
  13.    pop   state  year 
  14. 0  1.5    Ohio  2000 
  15. 1  1.7    Ohio  2001 
  16. 2  3.6    Ohio  2002 
  17. 3  2.4  Nevada  2001 
  18. 4  2.9  Nevada  2002 
  19.  
  20. >>> lista = [1,2,5,7] 
  21. >>> listb = ['a','b','c','d'] 
  22. >>> df = pd.DataFrame({'col1':lista,'col2':listb}) 
  23. >>> df 
  24.    col1 col2 
  25. 0     1    a 
  26. 1     2    b 
  27. 2     5    c 
  28. 3     7    d 

3.2 选择数据

 
 
 
  1. In [1]: import numpy as np 
  2.    ...: import pandas as 
  3.    ...: df = pd.DataFrame 
  4.  
  5. In [2]: df 
  6. Out[2]: 
  7.     a   b   c 
  8. 0   0   2   4 
  9. 1   6   8  10 
  10. 2  12  14  16 
  11. 3  18  20  22 
  12. 4  24  26  28 
  13. 5  30  32  34 
  14. 6  36  38  40 
  15. 7  42  44  46 
  16. 8  48  50  52 
  17. 9  54  56  58 
  18.  
  19. In [3]: df.loc[0,'c'] 
  20. Out[3]: 4 
  21.  
  22. In [4]: df.loc[1:4,['a','c']] 
  23. Out[4]: 
  24.     a   c 
  25. 1   6  10 
  26. 2  12  16 
  27. 3  18  22 
  28. 4  24  28 
  29. In [5]: df.iloc[0,2] 
  30. Out[5]: 4 
  31.  
  32. In [6]: df.iloc[1:4,[0,2]] 
  33. Out[6]: 
  34.     a   c 
  35. 1   6  10 
  36. 2  12  16 
  37. 3  18  22 

3.3 函数应用

 
 
 
  1. frame = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), 
  2.                      index=['Utah', 'Ohio', 'Texas', 'Oregon']) 
  3. frame 
  4. np.abs(frame) 
  5.  
  6. OUT: 
  7.             b      d            e 
  8. Utah 0.204708 0.478943 0.519439 
  9. Ohio 0.555730 1.965781 1.393406 
  10. Texas 0.092908 0.281746 0.769023 
  11. Oregon 1.246435 1.007189 1.296221 
  12.  
  13.  
  14. f = lambda x: x.max() - x.min() 
  15. frame.apply(f) 
  16. OUT: 
  17. b    1.802165 
  18. d    1.684034 
  19. e    2.689627 
  20. dtype: float64 
  21.  
  22. def f(x): 
  23.     return pd.Series([x.min(), x.max()], index=['min', 'max']) 
  24. frame.apply(f) 
  25.  
  26.             b d       e 
  27. Utah -0.20 0.48 -0.52 
  28. Ohio -0.56 1.97 1.39 
  29. Texas 0.09 0.28 0.77 
  30. Oregon 1.25 1.01 -1.30 

3.4 统计概述和计算

 
 
 
  1. df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5], 
  2.                    [np.nan, np.nan], [0.75, -1.3]], 
  3.                   index=['a', 'b', 'c', 'd'], 
  4.                   columns=['one', 'two']) 
  5. df 
  6. OUT: 
  7.     one     two 
  8. a 1.40 NaN 
  9. b 7.10 -4.5 
  10. c NaN     NaN 
  11. d 0.75 -1.3 
  12.  
  13.  
  14. df.info() 
  15. df.describe() 
  16.  
  17.  
  18.  
  19. Index: 4 entries, a to d 
  20. Data columns (total 2 columns): 
  21. one    3 non-null float64 
  22. two    2 non-null float64 
  23. dtypes: float64(2) 
  24. memory usage: 256.0+ bytes 
  25.  
  26. OUT: 
  27.           one          two 
  28. count 3.000000 2.000000 
  29. mean 3.083333 -2.900000 
  30. std 3.493685 2.262742 
  31. min 0.750000 -4.500000 
  32. 25% 1.075000 -3.700000 
  33. 50% 1.400000 -2.900000 
  34. 75% 4.250000 -2.100000 
  35. max 7.100000 -1.300000 

3.5 数据读取

 
 
 
  1. data = pd.read_csv('./dataset/HR.csv') 
  2. data.info() 
  3.  
  4. out: 
  5.  
  6. RangeIndex: 14999 entries, 0 to 14998 
  7. Data columns (total 10 columns): 
  8. satisfaction_level       14999 non-null float64 
  9. last_evaluation          14999 non-null float64 
  10. number_project           14999 non-null int64 
  11. average_montly_hours     14999 non-null int64 
  12. time_spend_company       14999 non-null int64 
  13. Work_accident            14999 non-null int64 
  14. left                     14999 non-null int64 
  15. promotion_last_5years    14999 non-null int64 
  16. sales                    14999 non-null object 
  17. salary                   14999 non-null object 
  18. dtypes: float64(2), int64(6), object(2) 
  19. memory usage: 1.1+ MB 
  20.  
  21. data = pd.read_csv('./dataset/movielens/movies.dat', header=None, names=['name', 'types'], sep='::', engine='python') 
  22. data.head() 
  23. OUT: 
  24.                 name types 
  25. 1 Toy Story (1995) Animation|Children's|Comedy 
  26. 2 Jumanji (1995) Adventure|Children's|Fantasy 
  27. 3 Grumpier Old Men (1995) Comedy|Romance 
  28. 4 Waiting to Exhale (1995) Comedy|Drama 
  29. 5 Father of the Bride Part II (1995) Comedy 
  30.  
  31.  
  32. data = pd.read_excel('./dataset/my_excel.xlsx', sheet_name=1) 
  33. data.head() 
  34. ouput: 
  35.         date H1 H2 H3 
  36. 0 2014-06-01 1 2 3 
  37. 1 2014-06-02 2 3 4 
  38. 2 2014-06-03 3 4 5 
  39. 3 2014-06-04 4 5 6 

#4. Time- Series的操作

生成日期范围:

 
 
 
  1. import pandas as pd 
  2. pd.data_range('20190313',periods=10) 
  3.  
  4. OUT: 
  5. DatetimeIndex(['2019-03-13', '2019-03-14', '2019-03-15', '2019-03-16', 
  6.                '2019-03-17', '2019-03-18', '2019-03-19', '2019-03-20', 
  7.                '2019-03-21', '2019-03-22'], 
  8.               dtype='datetime64[ns]', freq='D') 

5. 绘图功能

 
 
 
  1. ts = pd.DataFrame(np.random.randn(1000,4),index=pd.date_range('20180101',periods=1000),columns=list('abcd')) 
  2. ts = ts.cumsum() 
  3. ts.plot(figsize = (12,8)) 
  4. plt.show() 

名称栏目:Python数据分析,必须要求掌握Pandas大熊猫
路径分享:http://www.shufengxianlan.com/qtweb/news42/402292.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联