pandas有两种自己独有的基本数据结构Series和DataFrame

Series

  1. 数据结构
  2. data 100 300 500
  3. index 0 1 2
  4. 或者
  5. index data
  6. 0 100
  7. 1 300
  8. 2 500
  1. 创建series对象
  2. In [1]: import numpy as np
  3. In [2]: from pandas import Series,DataFrame
  4. In [3]: import pandas as pd
  5. 传递list创建对象,默认创建整数索引
  6. In [4]: s1 = Series([1,3,6,-1,2,8])
  7. In [5]: s1
  8. Out[5]:
  9. 0 1
  10. 1 3
  11. 2 6
  12. 3 -1
  13. 4 2
  14. 5 8
  15. dtype: int64
  16. 传入列表自定义索引创建对象
  17. In [9]: s2 = Series([1,3,6,-1,2,8],index = ["a","c","d","e","b","g"])
  18. In [10]: s2
  19. Out[10]:
  20. a 1
  21. c 3
  22. d 6
  23. e -1
  24. b 2
  25. g 8
  26. dtype: int64
  27. 传入字典创建对象
  28. In [11]: SD = {"python":100,"java":101,"scala":102}
  29. In [12]: s3 = Series(SD)
  30. In [14]: s3
  31. Out[14]:
  32. java 101
  33. python 100
  34. scala 102
  35. dtype: int64
  36. //显示数据值【values】和索引【index】
  37. In [6]: s1.values
  38. Out[6]: array([ 1, 3, 6, -1, 2, 8])
  39. In [7]: s1.index
  40. Out[7]: RangeIndex(start=0, stop=6, step=1)
  41. In [17]: s1
  42. Out[17]:
  43. 0 1
  44. 1 3
  45. 2 6
  46. 3 -1
  47. 4 2
  48. 5 8
  49. dtype: int64
  50. 自定义索引名字
  51. In [18]: s1.index = ["p1","p2","p3","p4","p5","p6"]
  52. In [19]: s1
  53. Out[19]:
  54. p1 1
  55. p2 3
  56. p3 6
  57. p4 -1
  58. p5 2
  59. p6 8
  60. dtype: int64
  61. 根据索引查看值和修改值
  62. In [20]: s1['p1']
  63. Out[20]: 1
  64. In [21]: s1['p1']=100
  65. In [22]: s1
  66. Out[22]:
  67. p1 100
  68. p2 3
  69. p3 6
  70. p4 -1
  71. p5 2
  72. p6 8
  73. dtype: int64
  74. 判断值是否为空
  75. In [29]: pd.isnull(s1)
  76. Out[29]:
  77. p1 False
  78. p2 False
  79. p3 False
  80. p4 False
  81. p5 False
  82. p6 False
  83. dtype: bool
  84. In [30]: pd.notnull(s1)
  85. Out[30]:
  86. p1 True
  87. p2 True
  88. p3 True
  89. p4 True
  90. p5 True
  91. p6 True
  92. dtype: bool
  93. 运算
  94. In [31]: s2
  95. Out[31]:
  96. a 1
  97. c 3
  98. d 6
  99. e -1
  100. b 2
  101. g 8
  102. dtype: int64
  103. In [32]: s2[s2>5]
  104. Out[32]:
  105. d 6
  106. g 8
  107. dtype: int64
  108. In [33]: s2*10
  109. Out[33]:
  110. a 10
  111. c 30
  112. d 60
  113. e -10
  114. b 20
  115. g 80
  116. dtype: int64

DataFrame

DataFrame几要素:index、columns、values等

  1. 通过传递一个list对象来创建一个Seriespandas会默认创建整形索引
  2. In [34]: s = pd.Series([1,3,5,np.nan,6,8])
  3. In [35]: s
  4. Out[35]:
  5. 0 1.0
  6. 1 3.0
  7. 2 5.0
  8. 3 NaN
  9. 4 6.0
  10. 5 8.0
  11. dtype: float64
  12. 通过传递一个numpy array,时间索引以及列标签创建DataFrame
  13. In [48]: dates = pd.date_range("20170101",periods = 6)
  14. In [49]: df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list("ABCD"))
  15. In [50]: df
  16. Out[50]:
  17. A B C D
  18. 2017-01-01 0.198724 1.455237 -1.165803 -0.474382
  19. 2017-01-02 0.622154 -0.280253 -0.492515 0.002470
  20. 2017-01-03 1.764839 -1.734531 -0.195002 0.128216
  21. 2017-01-04 -0.520130 1.372930 -2.240510 0.362139
  22. 2017-01-05 1.530835 0.406480 -1.714226 -0.289591
  23. 2017-01-06 0.675166 0.210024 -0.773319 -1.410746
  24. In [51]: dates
  25. Out[51]:
  26. DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
  27. '2017-01-05', '2017-01-06'],
  28. dtype='datetime64[ns]', freq='D')
  29. d1=DataFrame(np.arange(12).reshape((3,4)),index=['a','b','c'],columns=['a1','a2','a3','a4'])
  30. 比较常用的有导入等长列表、字典、numpy数组、数据文件等
  31. In [61]: data = {'name':['zxx','lxx','gxx','hxx'],'age':[12,13,14,15],'addr':['JX','JS','BJ','SH']}
  32. 字典数据转换为DataFrame,并指定索引
  33. In [62]: d2 = DataFrame(data)
  34. In [63]: d2
  35. Out[63]:
  36. addr age name
  37. 0 JX 12 zxx
  38. 1 JS 13 lxx
  39. 2 BJ 14 gxx
  40. 3 SH 15 hxx
  41. In [64]: d3 = DataFrame(data,columns=['name','age','addr'],index=['a','b','c','d'])
  42. In [65]: d3
  43. Out[65]:
  44. name age addr
  45. a zxx 12 JX
  46. b lxx 13 JS
  47. c gxx 14 BJ
  48. d hxx 15 SH
  49. df.dtypes 查看不同列的数据类型
  50. df.Tab 自动识别所有属性及自定义列
  51. df.head(2) 查看前两行
  52. df.tail(2) 查看尾部两行
  53. df.index 查看索引值
  54. df.columns 查看列名
  55. df.values 查看底层numpy数据
  56. In [56]: df.head(2)
  57. Out[56]:
  58. A B C D
  59. 2017-01-01 0.198724 1.455237 -1.165803 -0.474382
  60. 2017-01-02 0.622154 -0.280253 -0.492515 0.002470
  61. In [57]: df.tail(2)
  62. Out[57]:
  63. A B C D
  64. 2017-01-05 1.530835 0.406480 -1.714226 -0.289591
  65. 2017-01-06 0.675166 0.210024 -0.773319 -1.410746
  66. In [58]: df.index
  67. Out[58]:
  68. DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
  69. '2017-01-05', '2017-01-06'],
  70. dtype='datetime64[ns]', freq='D')
  71. In [59]: df.columns
  72. Out[59]: Index([u'A', u'B', u'C', u'D'], dtype='object')
  73. In [60]: df.values
  74. Out[60]:
  75. array([[ 0.19872446, 1.45523672, -1.16580285, -0.47438238],
  76. [ 0.62215406, -0.28025262, -0.49251531, 0.00247041],
  77. [ 1.76483913, -1.73453082, -0.19500168, 0.12821624],
  78. [-0.52013049, 1.37292972, -2.24051045, 0.36213914],
  79. [ 1.53083459, 0.40647992, -1.71422601, -0.28959076],
  80. [ 0.67516588, 0.2100239 , -0.77331882, -1.41074624]])

获取数据

  1. In [71]: d3=DataFrame(data,columns=['name','age','addr'],index=['a','b','c','d'])
  2. In [72]: d3
  3. Out[72]:
  4. name age addr
  5. a zhanghua 40 jianxi
  6. b liuting 45 pudong
  7. c gaofei 50 beijing
  8. d hedong 46 xian
  9. 选择列
  10. In [78]: d3[['name','age']]
  11. Out[78]:
  12. name age
  13. a zhanghua 40
  14. b liuting 45
  15. c gaofei 50
  16. d hedong 46
  17. 选择行
  18. In [84]: d3['a':'c']
  19. Out[84]:
  20. name age addr
  21. a zhanghua 40 jianxi
  22. b liuting 45 pudong
  23. c gaofei 50 beijing
  24. 选择行(利用位置索引)
  25. In [87]: d3[1:3]
  26. Out[87]:
  27. name age addr
  28. b liuting 45 pudong
  29. c gaofei 50 beijing
  30. 使用过滤条件
  31. In [90]: d3[d3['age']>40]
  32. Out[90]:
  33. name age addr
  34. b liuting 45 pudong
  35. c gaofei 50 beijing
  36. d hedong 46 xian
  37. obj.ix[indexs,[columns]]可以根据列或索引同时进行过滤
  38. In [91]: d3.ix[['a','c'],['name','age']]
  39. Out[91]:
  40. name age
  41. a zhanghua 40
  42. c gaofei 50
  43. In [93]: d3.ix['a':'c',['name','age']]
  44. Out[93]:
  45. name age
  46. a zhanghua 40
  47. b liuting 45
  48. c gaofei 50
  49. In [94]: d3.ix[0:3,['name','age']]
  50. Out[94]:
  51. name age
  52. a zhanghua 40
  53. b liuting 45
  54. c gaofei 50

修改数据

  1. In [95]: data={'name':['zhanghua','liuting','gaofei','hedong'],'age':[40,45,50,46],'addr':['jianxi','pudong','beijing','xian']}
  2. In [96]: d3=DataFrame(data,columns=['name','age','addr'],index=['a','b','c','d'])
  3. 删除行
  4. In [97]: d3.drop('d',axis=0)
  5. Out[97]:
  6. name age addr
  7. a zhanghua 40 jianxi
  8. b liuting 45 pudong
  9. c gaofei 50 beijing
  10. 删除列
  11. In [99]: d3.drop('age',axis=1)
  12. Out[99]:
  13. name addr
  14. a zhanghua jianxi
  15. b liuting pudong
  16. c gaofei beijing
  17. d hedong xian
  18. 添加一行,注意需要ignore_index=True
  19. In [103]: d4 = d3.append({'name':'wxx','age':38,'addr':'HN'},ignore_index=True)
  20. In [104]: d4
  21. Out[104]:
  22. name age addr
  23. 0 zhanghua 40 jianxi
  24. 1 liuting 45 pudong
  25. 2 gaofei 50 beijing
  26. 3 hedong 46 xian
  27. 4 wxx 38 HN
  28. In [105]: d4.ix['4','age']=100
  29. In [106]: d4
  30. Out[106]:
  31. name age addr
  32. 0 zhanghua 40.0 jianxi
  33. 1 liuting 45.0 pudong
  34. 2 gaofei 50.0 beijing
  35. 3 hedong 46.0 xian
  36. 4 wxx 38.0 HN
  37. 4 NaN 100.0 NaN
  38. 修改索引
  39. In [111]: d3.index=['a','b','c','d']
  40. In [112]: d3
  41. Out[112]:
  42. name age addr
  43. a zhanghua 40 jianxi
  44. b liuting 45 pudong
  45. c gaofei 50 beijing
  46. d hedong 46 xian

汇总统计

  1. 常用统计方法
  2. count 统计非NA的数量
  3. describe 统计列的汇总信息
  4. minmax 计算最小值和最大值
  5. sum 求总和
  6. mean 求平均数
  7. var 样本的方差
  8. std 样本的标准差
  9. 导入和保存数据
  10. 读取csv文件/或者逗号分隔的txt文件
  11. pd.read_csv('wu.csv')
  12. 读取HDFS数据
  13. pd.read_hdf('wu.h5',df)
  14. 写入为csv文件
  15. df.to_csv('wu.csv')
  16. 写入HDF5存储
  17. df.to_hdf('wu.h5','df')
  18. In [15]: inputfile = '/home/hadoop/wujiadong/wu1_stud_score.txt'
  19. In [16]: data = pd.read_csv(inputfile)
  20. In [40]: df = DataFrame(data)
  21. In [41]: df.head(3)
  22. Out[41]:
  23. stud_code sub_code sub_name sub_tech sub_score stat_date
  24. 0 2015101000 10101 数学分析 NaN 90 0000-00-00
  25. 1 2015101000 10102 高等代数 NaN 88 0000-00-00
  26. 2 2015101000 10103 大学物理 NaN 67 0000-00-00
  27. In [42]: df.count()
  28. Out[42]:
  29. stud_code 121
  30. sub_code 121
  31. sub_name 121
  32. sub_tech 0
  33. sub_score 121
  34. stat_date 121
  35. dtype: int64
  36. In [43]: df['sub_score'].describe()
  37. Out[43]:
  38. count 121.000000
  39. mean 78.561983
  40. std 12.338215
  41. min 48.000000
  42. 25% 69.000000
  43. 50% 80.000000
  44. 75% 89.000000
  45. max 98.000000
  46. Name: sub_score, dtype: float64
  47. 求学生成绩标准差
  48. In [44]: df['sub_score'].std()
  49. Out[44]: 12.338214729032906

应用函数和映射

  1. In [45]: d1 = DataFrame(np.arange(12).reshape((3,4)),index=['a','b','c'],columns=['a1','a2','a3','a4'])
  2. In [46]: d1
  3. Out[46]:
  4. a1 a2 a3 a4
  5. a 0 1 2 3
  6. b 4 5 6 7
  7. c 8 9 10 11
  8. 处理每个元素
  9. In [47]: d1.applymap(lambda x:x+2)
  10. Out[47]:
  11. a1 a2 a3 a4
  12. a 2 3 4 5
  13. b 6 7 8 9
  14. c 10 11 12 13
  15. 处理行数据
  16. In [54]: d1.ix[1].map(lambda x:x+2)
  17. Out[54]:
  18. a1 6
  19. a2 7
  20. a3 8
  21. a4 9
  22. Name: b, dtype: int64
  23. 列级处理
  24. In [62]: d1.apply(lambda x:x.max()-x.min(),axis=0)
  25. Out[62]:
  26. a1 8
  27. a2 8
  28. a3 8
  29. a4 8
  30. dtype: int64

参考资料

1)10 Minutes to pandas:

http://pandas.pydata.org/pandas-docs/stable/10min.html

2)十分钟搞定pandas:

http://www.cnblogs.com/chaosimple/p/4153083.html

3)Pandas使用:

https://github.com/qiwsir/StarterLearningPython/blob/master/311.md

4)python cookbook:

http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook

Pandas学习1的更多相关文章

  1. 用scikit-learn和pandas学习线性回归

    对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了. 1. 获取数据,定义问题 没有数据,当然没法研究机器学习 ...

  2. Pandas 学习笔记

    Pandas 学习笔记 pandas 由两部份组成,分别是 Series 和 DataFrame. Series 可以理解为"一维数组.列表.字典" DataFrame 可以理解为 ...

  3. Python pandas学习总结

    本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...

  4. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...

  5. pandas学习(创建多层索引、数据重塑与轴向旋转)

    pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...

  6. pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)

    pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...

  7. pandas学习(创建数据,基本操作)

    pandas学习(一) Pandas基本数据结构 Series类型数据 Dataframe类型 基本操作 Pandas基本数据结构 两种常用数据结构: Series 一维数组,与Numpy中的一维ar ...

  8. pandas 学习总结

    pandas  学习总结 作者:csj 更新时间:2018.04.02 shenzhen email:59888745@qq.com home: http://www.cnblogs.com/csj0 ...

  9. 用 scikit-learn 和 pandas 学习线性回归

      用 scikit-learn 和 pandas 学习线性回归¶ from https://www.cnblogs.com/pinard/p/6016029.html 就算是简单的算法,也需要跑通整 ...

  10. pandas学习系列(一):时间序列

    最近参加了天池的一个机场航空人流量预测大赛,需要用时间序列来预测,因此开始使用python的pandas库 发现pandas库功能的确很强大,因此在这记录我的pandas学习之路. # -*- cod ...

随机推荐

  1. 记录一次gitlab->github企业版的迁移

    cd到你想要存放新的工程的文件夹内, 1.使用git clone --mirror命令制作旧git的镜像 $ git clone --mirror git@git.aaaa.com:mario/my- ...

  2. 策略(strategy)模式

    Head First一书中对于策略(strategy)模式的正式定义是:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 为了介绍这个算法,书中讲了 ...

  3. python在处理CSV文件时,字符串和列表写入的区别

    概述 Python在处理CSV文件时,如果writerow的对象是<type 'unicode'>字符串时,写入到CSV文件时将会出现一个字符占一个单元格的情况: 但是将字符串转换为列表类 ...

  4. python发送GET或POST请求以便干一些趣事

    适合级别:入门,中级 关键字   :python, http, GET, POST, 安全, 模拟, 浏览器, 验证码,图片识别, google 1 此文不是关于黑客或安全话题的! 2 使用脚本程序发 ...

  5. python一两行代码完成的骚操作

    分享一个前几天晚上粉丝问的问题,觉得很实用的一个问题,用python读取Excel并保存字典,如何做? 下面是该同学问题截图和代码 ​ 代码截图是下面这样的 ​ 不知道大家第一眼看了这个代码,什么感受 ...

  6. IIS7.5 错误代码0x8007007e HTTP 错误 500.19

    目录 问题案例 解决问题 参考资料 问题案例 今天在win2008+IIS7.5的环境中部署WCF服务后,一直出现无法打开的页面.具体错误信息如下: HTTP 错误 500.19 - Internal ...

  7. C++ 类的两种定义方式

    类内定义 class Teacher { private: string _name; int _age; public: Teacher() { printf("create techer ...

  8. JS通过身份证号获取生日、年龄、性别

    <script> function IdCard(UUserCard,num){ if(num==1){ //获取出生日期 birth=UUserCard.substring(6, 10) ...

  9. SpringMVC的其他功能使用

    一.SpringMVC支持在控制器的业务方法中写入参数作为传递过来的变量 @Controller @RequestMapping(value="/kaiye") public cl ...

  10. Oracle优化-SQL_TRACE

    思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...