数据分析工具Pandas(1):Pandas的数据结构

举报
DrugAI 发表于 2021/07/15 03:09:25 2021/07/15
【摘要】 Pandas Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis)。 Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构 和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。 一个强大的分析和操作大型结构...

Pandas

Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis)。

Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构 和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。

  • 一个强大的分析和操作大型结构化数据集所需的工具集

  • 基础是NumPy,提供了高性能矩阵的运算

  • 提供了大量能够快速便捷地处理数据的函数和方法

  • 应用于数据挖掘,数据分析

  • 提供数据清洗功能

Pandas的数据结构

import pandas as pd

 

Pandas有两个最主要也是最重要的数据结构: Series 和 DataFrame

Series

Series是一种类似于一维数组的 对象,由一组数据(各种NumPy数据类型)以及一组与之对应的索引(数据标签)组成。

  • 类似一维数组的对象
  • 由数据和索引组成
    • 索引(index)在左,数据(values)在右
    • 索引是自动创建的

 

 

1. 通过list构建Series

ser_obj = pd.Series(range(10))

 


  
  1. # 通过list构建Series
  2. ser_obj = pd.Series(range(10, 20))
  3. print(ser_obj.head(3))
  4. print(ser_obj)
  5. print(type(ser_obj))

运行结果:


  
  1. 0 10
  2. 1 11
  3. 2 12
  4. dtype: int64
  5. 0 10
  6. 1 11
  7. 2 12
  8. 3 13
  9. 4 14
  10. 5 15
  11. 6 16
  12. 7 17
  13. 8 18
  14. 9 19
  15. dtype: int64
  16. <class 'pandas.core.series.Series'>

2. 获取数据和索引

ser_obj.index 和 ser_obj.values

 


  
  1. # 获取数据
  2. print(ser_obj.values)
  3. # 获取索引
  4. print(ser_obj.index)

运行结果:


  
  1. [10 11 12 13 14 15 16 17 18 19]
  2. RangeIndex(start=0, stop=10, step=1)

3. 通过索引获取数据

ser_obj[idx]

 


  
  1. #通过索引获取数据
  2. print(ser_obj[0])
  3. print(ser_obj[8])

运行结果:


  
  1. 10
  2. 18

4. 索引与数据的对应关系不被运算结果影响

 


  
  1. # 索引与数据的对应关系不被运算结果影响
  2. print(ser_obj * 2)
  3. print(ser_obj > 15)

运行结果:


  
  1. 0 20
  2. 1 22
  3. 2 24
  4. 3 26
  5. 4 28
  6. 5 30
  7. 6 32
  8. 7 34
  9. 8 36
  10. 9 38
  11. dtype: int64
  12. 0 False
  13. 1 False
  14. 2 False
  15. 3 False
  16. 4 False
  17. 5 False
  18. 6 True
  19. 7 True
  20. 8 True
  21. 9 True
  22. dtype: bool

5. 通过dict构建Series

 


  
  1. # 通过dict构建Series
  2. year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5}
  3. ser_obj2 = pd.Series(year_data)
  4. print(ser_obj2.head())
  5. print(ser_obj2.index)

运行结果:


  
  1. 2001 17.8
  2. 2002 20.1
  3. 2003 16.5
  4. dtype: float64
  5. Int64Index([2001, 2002, 2003], dtype='int64')

name属性

对象名:ser_obj.name

对象索引名:ser_obj.index.name

 


  
  1. # name属性
  2. ser_obj2.name = 'temp'
  3. ser_obj2.index.name = 'year'
  4. print(ser_obj2.head())

运行结果:


  
  1. year
  2. 2001 17.8
  3. 2002 20.1
  4. 2003 16.5
  5. Name: temp, dtype: float64


DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同类型的值。DataFrame既有行索引也有列索引,它可以被看做是由Series组成的字典(共用同一个索引),数据是以二维结构存放的。

  • 类似多维数组/表格数据 (如,excel, R中的data.frame)
  • 每列数据可以是不同的类型
  • 索引包括列索引和行索引

 

 

1. 通过ndarray构建DataFrame

 


  
  1. import numpy as np
  2. # 通过ndarray构建DataFrame
  3. array = np.random.randn(5,4)
  4. print(array)
  5. df_obj = pd.DataFrame(array)
  6. print(df_obj.head())

运行结果:


  
  1. [[ 0.83500594 -1.49290138 -0.53120106 -0.11313932]
  2. [ 0.64629762 -0.36779941 0.08011084 0.60080495]
  3. [-1.23458522 0.33409674 -0.58778195 -0.73610573]
  4. [-1.47651414 0.99400187 0.21001995 -0.90515656]
  5. [ 0.56669419 1.38238348 -0.49099007 1.94484598]]
  6. 0 1 2 3
  7. 0 0.835006 -1.492901 -0.531201 -0.113139
  8. 1 0.646298 -0.367799 0.080111 0.600805
  9. 2 -1.234585 0.334097 -0.587782 -0.736106
  10. 3 -1.476514 0.994002 0.210020 -0.905157
  11. 4 0.566694 1.382383 -0.490990 1.944846

2. 通过dict构建DataFrame

 


  
  1. # 通过dict构建DataFrame
  2. dict_data = {'A': 1,
  3. 'B': pd.Timestamp('20170426'),
  4. 'C': pd.Series(1, index=list(range(4)),dtype='float32'),
  5. 'D': np.array([3] * 4,dtype='int32'),
  6. 'E': ["Python","Java","C++","C"],
  7. 'F': 'ITCast' }
  8. #print dict_data
  9. df_obj2 = pd.DataFrame(dict_data)
  10. print(df_obj2)

运行结果:


  
  1. A B C D E F
  2. 0 1 2017-04-26 1.0 3 Python ITCast
  3. 1 1 2017-04-26 1.0 3 Java ITCast
  4. 2 1 2017-04-26 1.0 3 C++ ITCast
  5. 3 1 2017-04-26 1.0 3 C ITCast

3. 通过列索引获取列数据(Series类型)

df_obj[col_idx] 或 df_obj.col_idx

示例代码:


  
  1. # 通过列索引获取列数据
  2. print(df_obj2['A'])
  3. print(type(df_obj2['A']))
  4. print(df_obj2.A)

运行结果:


  
  1. 0 1.0
  2. 1 1.0
  3. 2 1.0
  4. 3 1.0
  5. Name: A, dtype: float64
  6. <class 'pandas.core.series.Series'>
  7. 0 1.0
  8. 1 1.0
  9. 2 1.0
  10. 3 1.0
  11. Name: A, dtype: float64

4. 增加列数据

df_obj[new_col_idx] = data

类似Python的 dict添加key-value

示例代码:


  
  1. # 增加列
  2. df_obj2['G'] = df_obj2['D'] + 4
  3. print(df_obj2.head())

运行结果:


  
  1. A B C D E F G
  2. 0 1.0 2017-01-02 1.0 3 Python ITCast 7
  3. 1 1.0 2017-01-02 1.0 3 Java ITCast 7
  4. 2 1.0 2017-01-02 1.0 3 C++ ITCast 7
  5. 3 1.0 2017-01-02 1.0 3 C ITCast 7

5. 删除列

del df_obj[col_idx]

 


  
  1. # 删除列
  2. del(df_obj2['G'] )
  3. print(df_obj2.head())

运行结果:


  
  1. A B C D E F
  2. 0 1.0 2017-01-02 1.0 3 Python ITCast
  3. 1 1.0 2017-01-02 1.0 3 Java ITCast
  4. 2 1.0 2017-01-02 1.0 3 C++ ITCast
  5. 3 1.0 2017-01-02 1.0 3 C ITCast

参考资料

https://pandas.pydata.org/

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/104269624

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。