上手Pandas,带你玩转数据(1)-- 实例详解pandas数据结构

看,未来 2021-04-06 17:04:31
pandas 玩转 带你 上手 转数


在这里插入图片描述

关于pandas

昨天写一个小项目的时候,想用pandas把数据写入到Excel中去,结果发现我原先写的那套pandas教程是真的垃圾啊。
痛定思痛,我决定重写一份。

pandas创始人对pandas的讲解

在pandas的官网(Python Data Analysis Library)上,我们可以看到有一段pandas创始人Wes McKinney对pandas的讲解,从创始人的角度我们可以直接理解pandas这个python的数据分析库的主要特性和发展方向。

McKinney一共总结了9个特性,我们来一个个过一下。

1.对表格类型的数据的读取和输出速度非常快。(个人对比excel和pandas,的确pandas不会死机....)在他的演示中,我们可以看到读取489597行,6列的数据只要0.9s。
2.时间序列处理。经常用在金融应用中。
3.数据队列。可以把不同队列的数据进行基本运算。
4.处理缺失数据。
5.分组运算。比如我们在前面泰坦尼克号中的groupby。
6.分级索引。
7.数据的合并和加入。
8.数据透视表。
9.数据归纳和分析。

pandas的热度

在这里插入图片描述

pandas之所以能有这样的热度,和在座的各位都脱不了干系!!!


pandas对于数据分析

pandas全面支持数据分析项目的研发步骤:
在这里插入图片描述


pandas数据结构简介

之前学pandas,一上来就是存取,然后就是处理,到后面没办法了,学一下数据结构,不是我说,真不知道那个老师是怎么排的课?

pandas处理以下数据结构:

系列(Series)
数据帧(DataFrame)
面板(Panel)

说实话,第三种我也没接触过。

或者,我们换个方式来理解:Series是一维的,FataFrame是二维的,Panel是三维的。

数据结构 外形尺寸 描述
序列 1 1D标记的同质阵列,sizeimmutable。
数据帧 2 一般的二维标签,大小可变的表格结构,具有潜在的非均匀类型列。
面板 3 一般3D标签,大小可变的数组。

Series

系列是具有均匀数据的一维数组结构。(说白了就是数组)
在这里插入图片描述

生成Series:

import numpy as np
import pandas as pd
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)

DataFrame

DataFrame,前面已经说到,它就是个二维数组。

先看几个生成DataFrame的方式,惭愧啊,之前那个系列还没有完整的说过这一块儿的内容。

用 Series 字典对象生成 DataFrame:

df = pd.DataFrame(
{

'A': 1.,
'B': pd.Timestamp('20130102'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'
}
)

这种方式生成的对象是这样的:

 A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo

相当于刚才是一列一列插入的。

如果想一行一行的插入呢?

从numpy导入数据:

df = pd.DataFrame([[1,5,8],[2,np.nan,np.nan],[2,3,np.nan],[np.nan,np.nan,np.nan]])

这样就好。

 0 1 2
0 1.0 5.0 8.0
1 2.0 NaN NaN
2 2.0 3.0 NaN
3 NaN NaN NaN

pandas数据结构方法详解

Series

Pandas序列可以使用以下构造函数创建:

pandas.Series( data, index, dtype, copy)

参数释义:

data:数据采取各种形式,如:ndarray,list,constants
index:索引值必须是唯一的和散列的,与数据的长度相同。 默认np.arange(n)如果没有索引被传递。
dtype:dtype用于数据类型。如果没有,将推断数据类型
copy:复制数据,默认为false。

创建序列

创建一个空序列:s = pd.Series()


从ndarray创建一个序列:

data = np.array(['a','b','c','d'])
s = pd.Series(data)
0 a
1 b
2 c
3 d
dtype: object

如果数据是ndarray,则传递的索引必须具有相同的长度。如果没有索引被传递,那么默认情况下,索引将是 range(n)

data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
100 a
101 b
102 c
103 d
dtype: object

从字典创建一个序列:

data = {
'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
a 0.0
b 1.0
c 2.0
dtype: float64

一个 字典 可以作为输入传递,如果没有指定索引,那么字典键将按照排序的顺序进行构建索引。如果 索引 被传递, 索引 中的标签对应的数据值将被取出。

data = {
'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
b 1.0
c 2.0
d NaN
a 0.0
dtype: float64

索引顺序持续存在,缺少的元素用NaN(不是数字)填充。


从标量创建一个序列:

s = pd.Series(5, index=[0, 1, 2, 3])
0 5
1 5
2 5
3 5
dtype: int64

访问序列

从位置序列访问数据:

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s[0])
print(s[:3])

使用标签检索数据(索引):

s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print(s['a'])
print(s[['a','c','d']])
print(s['f']) #引发异常

DataFrame

可以使用以下构造函数创建一个pandas DataFrame:

pandas.DataFrame( data, index, columns, dtype, copy)

参数释义:

参数和说明
data:数据采用各种形式,如ndarray,序列,地图,列表,字典,常量和另一个DataFrame。
index:对于行标签,如果没有索引被传递,则要用于结果帧的索引是可选缺省值np.arrange(n)。
columns:对于列标签,可选的默认语法是 - np.arrange(n)。这只有在没有通过索引的情况下才是正确的。
dtype:每列的数据类型。
copy:如果默认值为False,则使用该命令(或其它)复制数据。

创建DataFrame

创建一个空的DataFrame:df = pd.DataFrame()


从列表中创建一个DataFrame:

data = [1,2,3,4,5]
df = pd.DataFrame(data)
0
0 1
1 2
2 3
3 4
4 5
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
Name Age
0 Alex 10
1 Bob 12
2 Clarke 13
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
Name Age
0 Alex 10.0
1 Bob 12.0
2 Clarke 13.0

从ndarrays / Lists的Dict创建一个DataFrame:

data = {
'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
Age Name
0 28 Tom
1 34 Jack
2 29 Steve
3 42 Ricky
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
Age Name
rank1 28 Tom
rank2 34 Jack
rank3 29 Steve
rank4 42 Ricky

从列表中创建一个DataFrame:

data = [{
'a': 1, 'b': 2},{
'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
a b c
0 1 2 NaN
1 5 10 20.0
df = pd.DataFrame(data, index=['first', 'second'])
a b c
first 1 2 NaN
second 5 10 20.0

字典列表可以作为输入数据传递以创建DataFrame。字典键默认作为列名。


从序列字典创建一个DataFrame:

d = {
'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4

访问DataFrame

列处理
d = {
'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(df['one'])

列增:

df['three']=pd.Series([10,20,30],index=['a','b','c'])
print(df)
df['four']=df['one']+df['three']
print(df)
# 前面不看啊,没有悬念,就看着最后一个输出
one two three four
a 1.0 1 10.0 11.0
b 2.0 2 20.0 22.0
c 3.0 3 30.0 33.0
d NaN 4 NaN NaN

列删:

del df['one']
print(df)
df.pop('two')
print(df)

行处理

按标签选择:

d = {
'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print(f.loc['b'])
one 2.0
two 2.0
Name: b, dtype: float64

按行数选择:

print(df.iloc[2])
print(df[2:4])

行增:

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2)
print(df)
a b
0 1 2
1 3 4
0 5 6
1 7 8

行删:
使用索引标签从DataFrame中删除或删除行。如果标签存在重复使用,则多行将被删除。

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = df.append(df2) # 注意看上面的行标签
df = df.drop(0)
print(df)
a b
1 3 4
1 7 8

在上面的例子中,两行被删除,因为这两行包含相同的标签0。


panel

面板可以使用以下构造函数创建:

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

参数释义:

data:数据采用各种形式,如ndarray,序列,地图,列表,字典,常量和另一个DataFrame
items:axis=0
major_axis:axis=1
minor_axis:axis=2
dtype:每列的数据类型
copy:复制数据。默认, **false**

创建Panel

面板可以使用多种方式创建:

从ndarrays
来自DataFrames的字典

这个模块儿不讲太多啦,毕竟我是真没用过。


从3D ndarray创建:

data = np.random.rand(2,4,5)
p = pd.Panel(data)
print(p)
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4

来自DataFrame对象的字典:

data = {
'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print(p)
# 结果同上

创建一个空面板:

p = pd.Panel()
<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None

从panel中选择数据

data = {
'Item1' : pd.DataFrame(np.random.randn(4, 3)),
'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print(p['Item1'])
0 1 2
0 0.488224 -0.128637 0.930817
1 0.417497 0.896681 0.576657
2 -2.775266 0.571668 0.290082
3 -0.400538 -0.144234 1.110535

使用major_axis:

print(p.major_xs(1))
Item1 Item2
0 -0.128637 -1.047032
1 0.896681 -0.557322
2 0.571668 0.431953
3 -0.144234 1.302466

基本方法速查

Series基本方法

属性或方法 描述
axes 返回行轴标签的列表。
dtype 返回对象的dtype。
empty 如果series为空,则返回True。
ndim 根据定义1返回基础数据的维度数。
size 返回基础数据中元素的数量。
values 将该序列作为ndarray返回。
head() 返回前n行。
tail() 返回最后n行。

DataFrame基本方法

属性或方法 描述
Ť 转置行和列。
axes 以行轴标签和列轴标签作为唯一成员返回列表。
dtypes 返回此对象中的dtypes。
empty 如果NDFrame完全为空[没有项目],则为true; 如果任何轴的长度为0。
ndim 轴/阵列尺寸的数量。
shape 返回表示DataFrame维度的元组。
size NDFrame中的元素数目。
values NDFrame的Numpy表示。
head() 返回前n行。
tail() 返回最后n行。

好物推荐

发现几款CSDN学院不错的内容,喜欢的小伙伴可以收藏一下。

大数据搜索:Python大数据编码实战
Python数据分析与挖掘
Python企业招聘,百万级信息爬取
Python数据清洗实战

要再多也没有啦。


饿都饿死了,今天先到这儿,赶着去食堂抢饭了。。。

在这里插入图片描述

在这里插入图片描述

版权声明
本文为[看,未来]所创,转载请带上原文链接,感谢
https://lion-wu.blog.csdn.net/article/details/115453297

  1. 商业数据分析从入门到入职(7)Python基础数据结构及其操作
  2. 商业数据分析从入门到入职(6)Python程序结构和函数
  3. Business data analysis from entry to entry (9) Python Network Data Acquisition
  4. Business data analysis from entry to entry (8) Python module, file IO and object oriented
  5. Business data analysis from entry to entry (7) Python basic data structure and its operation
  6. Business data analysis from entry to entry (6) Python program structure and function
  7. 简简单单实现 Python Web 的登录注册页面,还包含一半逻辑。
  8. Simple implementation of Python web login registration page, but also contains half of the logic.
  9. 什么是pip?Python新手入门指南
  10. What is PIP? Getting started with Python
  11. Python uses for... Else to jump out of double nested loop
  12. Python基础之:Python中的内部对象
  13. 人工智能入门:Python实现机器学习
  14. The foundation of Python: inner objects in Python
  15. Introduction to artificial intelligence: machine learning in Python
  16. Python基础之:Python中的内部对象
  17. The foundation of Python: inner objects in Python
  18. Python 小技之 Office 文件转 PDF
  19. 还在为多张Excel汇总统计发愁?Python 秒处理真香!
  20. 用 Python 制作音乐聚合下载器
  21. Spark Delta Lake 0.4.0 发布,支持 Python API 和部分 SQL
  22. How to transfer office files to PDF
  23. Are you still worried about multiple excel summary statistics? Python second processing really fragrant!
  24. Making music aggregate downloader with Python
  25. Spark delta Lake 0.4.0 is released, supporting Python API and part of SQL
  26. Python信息搜集
  27. Python information gathering
  28. Python - 关于类(self/cls) 以及 多进程通讯的思考
  29. Python - thinking about class (self / CLS) and multi process communication
  30. Python - 关于类(self/cls) 以及 多进程通讯的思考
  31. Python - thinking about class (self / CLS) and multi process communication
  32. Python信用评分卡建模(附代码)
  33. Python credit score card modeling (with code)
  34. 学Python需要学数据库吗?Python学习教程!
  35. Do you need to learn database to learn Python!
  36. Python私有变量如何定义?Python学习教程!
  37. How to define Python private variables? Python tutorial!
  38. Python数据分析入门(六):Pandas的函数应用
  39. Introduction to Python data analysis (6): function application of pandas
  40. 学Python需要学数据库吗?Python学习教程!
  41. Do you need to learn database to learn Python!
  42. Python描述 LeetCode 80. 删除有序数组中的重复项 II
  43. C++/python描述 AcWing 94. 递归实现排列型枚举
  44. C++/python描述 AcWing 92. 递归实现指数型枚举
  45. Python描述 LeetCode 88. 合并两个有序数组
  46. 苏州大学计算机考研 复试机试真题2013-2021真题及Python题解
  47. Python描述 LeetCode 781. 森林中的兔子
  48. 字典和json的区别是什么?Python学习
  49. Python describes leetcode 80. Removing duplicate items from ordered arrays II
  50. C + + / Python description acwing 94. Recursive implementation of permutation enumeration
  51. C + + / Python description acwing 92. Recursive implementation of exponential enumeration
  52. Python describes leetcode 88. Merging two ordered arrays
  53. Real computer test questions 2013-2021 of computer postgraduate entrance examination of Soochow University and python solutions
  54. The rabbit in the forest
  55. Python中的魔法属性
  56. What's the difference between dictionary and JSON? Python learning
  57. Magic properties in Python
  58. 字典和json的区别是什么?Python学习
  59. What's the difference between dictionary and JSON? Python learning
  60. python刷题-字母图形