c++中整形输入逗号_带你看懂pandas中的两种数据结构

7eaa8088608756a06890db0b5aa971a6.png

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

在pandas包含了三种数据结构:

  • SeriesDataFrameTime-series

下面我们就介绍一下Series和DataFrame这两种常用的数据结构,Time-series时间序列,我们后期会专门在开一篇文章仔细的去讲述一下。

一、Series

Series是一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率,并且series可以运用Ndarray或字典的几乎所有索引操作和函数,融合了字典和ndarray的优点。

1、series索引

Series类型是由一组数据及与之相关的数据索引组成

自动索引:不创建系统自动创建索引。

自定义索引:自定义索引,创建完自定义索引后,自动索引也在。

Series是一维带’标签’数组,它的基本操作类似Ndarray和字典,genuine索引对齐。

2、创建对象

Series(列表/元组/字典/标量/Numpy数组/range等序列,)不写index会自动创建索引,如果写定指定索引,index可以是列表,numpy数组。

列子如下:

  • 参数:列表或元组,并分别创建自动索引和手动索引(自动索引还在)
a81aef14453b5c35c290c0728f27a240.png

可以看出index('a', 'b', 'c', 'd', 'e')分别对应1,3,5,7,9

  • 参数:字典,并分别创建自动索引和手动索引

字典的key作为索引,value作为值

ac5058c10bda9e853cbc217281f7203e.png

如果字典中在设置index,就相当于是从字典中挑选数据

e450299eb703ca8e631ea200ddc1b42f.png
59a23352bcd9b4a1db23e3f701dc8fce.png
  • 参数:标量
257f32bdb1082aa220b6ef3d206a28d7.png
bcfc7ed0f42331f8a14bdaba825100c9.png

Index可以是列表,元组,range序列,numpy数组

79b6b1583219c406c54c833934ebc026.png
  • 参数:numpy数组(ndarray)
6125c7497bae0953ad6562f1a4ce861a.png

3、属性

Series的主要属性包括index和values两部分

属性

说明

Values

获取数据,底层存储的是numpy数组

Index

获取索引

还有两个不太重要的属性

Name

Series的name(在DataFrame中没有Name属性)

Index.name

索引的name

还有一些类似于numpy数组的属性,比如dtype和shape等。

下面是一些属性的列子:

f856a822cd13778d74f9858bf3148245.png

3.1Values值

0468b49c9a704157266a14ff07e182fe.png

3.2Index索引

e50477cb703b4a23c5f1748a701dff65.png

3.3Name,series的名字

26ab8cad385e7c82278a99445b6e4dd0.png

3.4Index,series索引的名字

9dffb8ec3664f526d4a66059f6635960.png

4、选取

  • series类型的选取类似numpy数组,索引的方式相同,采用[],numpy中的运算和操作可用于series类型,可以通过自定义索引的列表进行切片也可以通过自动索引进行切片,如果存在自定义索引,则一同被切片
a82d94bac3a20775c9aa0007ca7c5fd5.png
  • series类型的操作类似于python字典类型:

通过自定义索引访问,保留字in操作,使用.get()方法

a67bbd182a0b613dc29a4727662671ec.png

PS:.get(key,default=none)函数返回指定键的值,如果值不再字典中则返回默认值(默认为空),key是要查找的键,default是设置的默认值。

5、series类型对齐操作

Series+series,series类型在运算中会自动对齐不同索引的数据。

  • Series类型对齐
092652e5cef3b1bb1b72a219afa1a5f2.png

6、获取,设置,删除等

6.1获取值

由于具备numpy数组和字典的特性,series可以像使用numpy数组的索引切片或用字典的get一样来用。

0d592d16d242180da6f4a85808d3a9a9.png

6.2设置/修改:索引和切片

32315957b8531a7a7175b1d8efbd81b9.png
  • 将a修改为11
a895a00b2e43a3d045ca5b7c7bbcc0a6.png
  • 将b,c修改为100
d8e3efaa81bf7809c4cf228d2e8f5afd.png
  • 将b,c改为101和102
7cc2f7bee977a36ed08a3bf2bd0b6798.png
  • 将b,c改为103和104(注意这次用的是逗号,表示单独挑选出了b和c,上面是b到c)
438cbfaae7a6c8fc7245d96fca67296f.png

6.3删除

drop方法(结果改变)和pop(像字典的用法,改变自身)

  • Drop:
2e98d35ae9d2c4289c711e08b27c2be3.png
  • 删除a,结果改变
db48ed6f4022581e1f19d93c87ca07fa.png
  • 删除b和d
9b69c54bfacfb3a7b766a0d896401da2.png
  • Pop:
aca3bf3d36d2393852505e36e1bbde57.png

二、DataFrame

DataFrame类型由公用相同索引的一组序列组成,是一个表格型的数据类型,每列值类型可以不同。DataFrame即有行索引也有列索引:

  • Index axis = 0(默认)Column axis = 1(默认)

DataFrame常用于表达二维数据,但可以表达多维数据,基本操作类似于Series,依据行列索引

1、DataFrame的创建

1.1、从内存中创建

语法:

DataFrame(字典/列表/numpy数组/DataFrame,index=0,columns=1)也可以在创建的时候不指定index和columns,在创建完后单独设置这两个属性。

常用的参数:

  • 字典:key作为列名,value作为该列的值。列表:作为值Numpy数组:作为值

例子:

2364e24b2f1506695e06e3220cf62446.png
  • 列表
0e5a96615a8f52a3dd9e083e3ea82c13.png

手动创建行索引和列索引,方法1:创建的时候就设置好行列索引

1e7d4edfb7e76d27cdb63cf39ed9d768.png

手动创建行列索引,方法2:创建的时候设置自动索引,之后在修改

800a0c86be35e7fa5003eae51844b478.png
  • 二维numpy数组

手动输入数组

7ac0e9d150cababf857205a6db951546.png

使用方法生成数组

bf6af932e86e6e7ca833ce6e86c7db06.png
  • 字典(key是列名,value可以是数据,也可以是series类型)

手动创建列索引,行索引自动创建

232347a04fb1621e1c1725c7005bc1d9.png

手动创建列索引,手动创建行索引

c4ebfc996507e32f862d709c6b219459.png

1.2、从文件中创建

DataFrame可以从文件中创建:

文件第一行默认作为列索引(columns),默认为没有行索引,可以通过indx_dol参数设置第1列或前几行作为行索引。如果第一行不作为列索引,设置header=none。

文件编码为utf-8,可以通过参数encoding设置编码。

方式

作用

pd.read_csv(filename)

从CSV文件导入数据, 文件是逗号分隔。

pd.read_table(filename,)

从限定分隔符的文本文件导入数据,默认是 tab

pd.read_excel(filename)

从Excel文件导入数据

pd.read_sql(query, connection_object)

从SQL表/库导入数据

pd.read_json(json_string)

从JSON格式的字符串导入数据

pd.read_html(url)

解析URL、 字符串或者HTML文件, 抽取其中的tables表格

pd.read_clipboard()

从你的粘贴板获取内容, 并传给read_table()

下面我们就将上面的这么多方法一个个演示一遍,文章中用的这些数据可以自己生成对应格式的就可以了,这个是不影响的,只要自己掌握了这些知识就好。

d6cd50ebf2dcd41a0fbf095be6d55444.png
  • Pd.read_csv(filename):从CSV文件导入数据,文件是逗号分隔。编码是utf-8
76f10ec52f2ac34a0647399fa31eca52.png
  • 编码是gbk
3fc76b5668791f7a5ee47003e53621e2.png

读取的时候,可以带行索引,用index_col=列

636d1bd2c4f5a538a6b683651f8d3680.png
  • 不把第一行作为列索引(在有些情况下,文件中全部都是数据)
6b3dc523805e4d88116a385144a219c9.png

2)pd.read_table(filename)

746246309b2aa5f878352dd056386b0a.png

查看DataFrame的信息http://df.info()

38b2b8f19f3c8d60720200930969dfef.png

3) pd.read_excel(filename):从Excel文件中导入数据

ca0769f7ecac3af3e3a4fecc8289366a.png

4) pd.read_sql(query, connection_object):从SQL表/库导入数据

SQLAlchemy是python编程语言下的一款ORM框架,该框架建立在数据库API上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL

首先导入两个模块,连接数据库建议用sqlalchemy,使用pymysql可能会出问题

66101924fd550d126fdf63565eff1d0a.png

Sqlalchemy.create(‘mysql+pymysql://用户名:用户名密码@localhost:编号/数据库名称’)

不清楚用户名和编号的可以使用mysql workbench查看

a3c81166a808a071cce8ee9834dceca7.png
2f38bd20cba47df1a82d31840f6b7296.png

将文件写入到数据库中

c965363c98ef911b27e52ad108ec422c.png
0bfff5b7079e432275f6d8f788538870.png

Test是要在数据库中创建的表名,表示的意思是将df的数据传入到数据库lianxi下的表test中

5) pd.read_json(json_string)

4cb2f558fdfb729261c0d001b21cfdce.png

6) pd.read_html(url)

首先要安装html5lib,pip install html5lib

3b52fd741a6c441eaf7074bd805f3ab1.png

7) pd.read_clipboard():从剪切板导入数据

首先复制一段文字

然后运行代码

6e8d0d9f1e3db670494752371bf52fe9.png

2、写入文件

写入数据后,前往输入路径下查看文件

方式

作用

df.to_csv(filename)

导出数据到CSV文件

df.to_excel(filename)

导出数据到Excel文件

df.to_sql(table_name, connection_object)

导出数据到SQL表

df.to_json(filename)

以Json格式导出数据到文本文件

d4927b31c5a57cc1a5ab004e9d762d7a.png

1)第一种方式:将行索引和列索引肉写入到文件

  • df.to_csv(filename):将文件导出到CSV文件中
96716938cb538047bbd78f453d8ff4b4.png
  • df.to_excel(filename):导出数据到Excel文件
a4ae05bcfdd5c3d2cd8b9eae276b33e2.png
  • df.to_json(filename):以Json格式导出数据到文本文件
c44ce6ef117c2cdf8272c091f674c61c.png

2)第二种方式:行索引不写入

970462f4a121d24cd9f43bf6df5f1d20.png

3)第三种方式:行和列索引都不写入

8c22742cda6768059e7330fc1fa2dfa1.png

3、DataFrame的属性

属性

说明

Values

Index

行索引

Columns

列索引

Index.name

行索引名字

Columns.name

列索引名字

其他属性:dtypes,shape等,可以用numpy数组等等大部分属性

f4b6b9075829cb89080f5bde4195b5ae.png
  • 查看自身的属性(重要):值,行索引,列索引
43e0e98ee877ccf926c0b48a04ca2b6e.png
  • 查看自身属性(不重要):列索引名字,行索引名字
c4947b24cd963b3deb8f5e54e9ac80ff.png
  • 查看其他属性:可以使用ndarray的属性
1c4da0c7af63b03a8aa914507cae28e6.png

4、DataFrame的函数和方法

4.1、取值和修改(索引,切片,ix,loc,iloc)

DataFrame的取值和修改应该从三个层次考虑:行列,区域,单元格。每个层次都有其对应的方法:

行列df[],df.ix

区域df.ix[]

单元格df.ix

其中ix官方推荐使用iloc和loc代替

loc和iloc的用法和ix基本一样,只是loc参数用手动索引,iloc用自动索引,ix混用

1682a7def86b9e8221c9477266cd7d37.png

取行:

243656264a33a1639f02889073718b0b.png

取列:

6c45619dba9642c1584de35b60812f0a.png

5、其他函数或方法

5.1查看数据

  • df.head(n): 查看DataFrame对象的前n行
04e2933946a968ec6779d47e3c52bd77.png
  • df.tail(n): 查看DataFrame对象的最后n行
61ef93c5eee99ab692926c7ade28713b.png
  • df.shape: 查看行数和列数
652e7bc54b8beccd08b1f9e1010b1524.png
  • http://df.info(): 查看索引、 数据类型和内存信息
c48ee05d0c58170e243ebdc965da32c6.png
  • df.describe(): 查看数值型列的汇总统计
30942c371862a8c9698912aeef3585b2.png
  • s.value_counts(dropna=False): 查看Series对象的唯一值和计数
20bc2fcef19ba0e3d7d17459594380ee.png
e6e2eeefb266c8dbe58d0a36713466c4.png
  • df.apply(函数):把df应用于某个函数
46d12583f119cfe1def09ba4a77ed3cb.png

5.2、清洗数据

195ab0d061b5d1d0cb5b0c31e27a6ad8.png
  • df.columns = ['a','b','c','d','e']: 重命名列名
f472e05e692d6f8fcee9b5a3e7e5e995.png
  • df.isnull(): 检查DataFrame对象中的空值, 并返回一个Boolean数组
22703b9aacaa49f4438c2a8768e8535d.png
  • df.notnull(): 检查DataFrame对象中的非空值, 并返回一个Boolean数组
5f8e95a8c4c1fe041686b202b5a1acd9.png
  • df.dropna(): 删除所有包含空值的行
e102c2b2c1445f0124b0597869491cd1.png
  • df.dropna(axis=1): 删除所有包含空值的列
11cc7b52a6049b46e9cc6ce31eb91a87.png

df.dropna(axis=1,thresh=n): 删除所有小于n个非空值的列

82f74cb3047bb53e276cfd12971068f2.png
  • df.fillna(x): 用x替换DataFrame对象中所有的空值
3ab73c58353fc1c3a75b0df43273579f.png
  • s.fillna(s.mean()): 用某列的均值来填充某列的空值
9e96a39567dba5636240792e87905b38.png
  • s.astype(float): 将Series中的数据类型更改为float类型
c3b686ca5d1871bc01a139d87b4c10b1.png
  • s.replace(1,'one'): 用‘one’ 代替所有等于1的值
9335c98d267e1153a81ea0f2f5e0a902.png
  • df.rename(columns=lambda x: x + '1'): 批量更改列名
6cb748c6930e3c8effc9adfc413b703f.png
  • df.rename(columns={'old_name': 'new_ name'}): 选择性更改列名
e262435a4db760ce195d48c8d82dcd33.png
  • df.set_index('column_one'): 更改索引列
6bd83c2f20def2b1f94c0a1528cbb06d.png
  • df.rename(index=lambda x: x + 1): 批量重命名索引
13ac6d3e4af136633220db2f40333c92.png

5.3、数据规整

  • df[df[col] > 0.5]: 选择col列的值大于0.5的行df.sort_values(col1): 按照列col1排序数据, 默认升序排列df.sort_values(col2, ascending=False): 按照列col1降序排列数据df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列, 后按col2降序排列数据df.groupby(col): 返回一个按列col进行分组的Groupby对象df.groupby([col1,col2]): 返回一个按多列进行分组的Groupby对象df.groupby(col1).agg(np.mean): 返回按列col1分组的所有列的均值df.groupby(col1).sum(): 返回按列col1分组的所有列的和df.groupby(col1).mean()[col2]: 返回按列col1进行分组后, 列col2的均值data.apply(np.mean): 对DataFrame中的每一列应用函数np.meandata.apply(np.max,axis=1): 对DataFrame中的每一行应用函数np.maxdf.pivot_table(index=col1, values=[col2,col3], aggfunc=np.mean):创建一个按列col1进行分组, 并计算col2和col3各自均值的数据透视表pd.crosstab(df.col1, df.col2): 按照指定的行(col1)和列(col2)统计分组频数

5.4、数据合并

  • df1.append(df2): 将df2中的行添加到df1的尾部
f0fc0b116c214adbc829f264bfcfff07.png
  • pd.concat([df1, df2],axis=0):将df2中的行添加到df1的底部(axis=1的时候将df2的列添加到df1的尾部)
3353b0ed3a3d173f228c36b133f57a6b.png

5.5、数据统计

  • df.describe(): 查看数据值列的汇总统计
e257a7c97f3668aeba043c98b862863a.png
  • df.mean(): 返回所有列的均值
1aceca4870999dc2e12b19d15a6f95be.png
  • df.corr(): 返回列与列之间的相关系数
87c94743ab9eb4a94966493d2821fcf9.png
  • df.count(): 返回每一列中的非空值的个数
488877bcb871a0fb9accb82965e746e7.png
  • df.max(): 返回每一列的最大值
f51c74f61dd7474f08dda5e698ed844b.png
  • df.min(): 返回每一列的最小值
b18cb0a6ec016e75bb7e56c662a521b0.png
  • df.median(): 返回每一列的中位数
0966f62dff79f7811264c2b58b68a8ce.png
  • df.std(): 返回每一列的标准差
f1235f7d26bf26202dea4da2c6a05a05.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值