Pandas-DataFrame构造

一. DataFrame的构造方式

1. 通过list或numpy数组构造DF

 

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.DataFrame([data = ['a', 'b', 'c'], ['d', 'e', 'f'],['g', 'h', 'i']],
                   columns = ['field1', 'field2', 'field3'])


     这是最简单的创建形式,传入的list一般是多维度的,且每一维度元素数目如果不一致,则DataFrame默认字符型缺失值为None,数值型缺失值为NaN(not a number);当list中传入的数据类型不一样时,遵循如下规则:

       ① list中如果有string类型则默认DataFrame该列为string类型

       ② list中如果是整数和小数,则小数对应的列是float类型

    columns指定的是列名(也就是之前结构中的字段名)。columns参数传入的sequence的长度与多维数组中的列数等长,否则会报错。

    其他创建DataFrame的参数还有:

        ① index(索引),他在官方文档中的定义为’Index to use for resulting frame. Will default to np.arange(m) ifno indexing‘,即默认是从0到m-1 (行数-1)。也可以自行设置一个序列用于作为索引,该序列中的元素数目必须与行数一致。

        ② dtype(类型),在官方文档中的解释为’Data type to force, otherwise infer‘,即用于强制转换数据类型,如果不指定则由Python自行推导。dtype的强制转换能力不是无限的,不可能将string转换为数值类。

2. 通过元组构造DF


     形式与list构建DataFrame相近,只是将list换成了tuple类型。
 

3. 通过字典构造DF

 

# -*- coding:utf-8 -*-
import pandas as pd

df = pd.DataFrame({'goods':['coke cola', 'eggplant','condom'], 
                   'quantity':[12,3,1], 
                   'price':[20,12,80]})

      简单的来说,利用Python的字典构造DataFrame就是讲DataFrame类中的data和columns参数合二为一,键值就是生成的DataFrame的列名。由于Python的字典是无序的,所以在不指定列的顺序的情况下,dict生成的DataFrame的列名顺序是随机的,如果列的顺序很重要,那么久再次对DataFrame中的columns参数进行设置,将字典中原有的键值进行排序。注意,此时上传的columns必须与dict中的键值一致,否则生成失败。

 

二. 生成数据的预览

1. shape属性

#-*- coding:utf-8 -*-
import pandas as pd
import MySQLdb as mdb

conn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')
df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])
df.shape

    shape属性返回的是一个tuple,二维的DataFrame显示的是(x,y),其中x是行数,y是列数。Pandas的Dataframe的shape属性输出的不是索引,而是实实在在的几行几列,所以要格外注意。

2. columns属性

#-*- coding:utf-8 -*-
import pandas as pd
#-*- coding:utf-8 -*-
import pandas as pd
import MySQLdb as mdb

conn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')
df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])
df.columns

    返回的形式是 Index(['column1','column2',...'colmun N'])这样的形式,显示的是各列的名字。

3.describe属性

#-*- coding:utf-8 -*-
import pandas as pd
import MySQLdb as mdb


conn = mdb.connect(host = 'localhost',port=3306,user= 'root',passwd='*****',db = 'test')
df = pd.read_sql_table(table_name='table1',con=conn,index_col='col1',columns=['col1','col2'...])
df.describe

    describe()方法用于描述DataFrame,其中有个 include参数,写入的是字符串或者一个列表,里面的元素是要查看的数据类型。

4. name属性

    dataframe的索引和列都是可以给定名字的,使用的是 index和 columns的 name属性,

 

5. 转换为Numpy数组

与Series一样,DataFrame的values属性能够将DataFrame转换为二维numpy数组的形式,

 

这个例子中,DataFrame的所有数据类型都是相同的,实际上,即使DataFrame数据类型不同,values属性也能将DataFrame转换为兼容所有数据类型的数组。

如在frame2中,各列的变量类型是不同的,

三. DataFrame运算

 

1. DataFrame之间的运算

运算时,行索引和列索引都要匹配上才能进行运算,否则得到的是缺失值,

但是在一些时候,运算产生的缺失值是不希望继续传播的,此时可以使用Pandas提供的一些方法,

以封装好的add方法进行演示,

对于上面两个DataFrame,使用普通的运算符进行运算,没有行列匹配的元素会得到NaN的值,

使用封装的add方法,对缺失数据时的值进行设置,

2. Series与DataFrame之间的运算

 

pandas基于numpy,所以dataframe和series之间运算时,会有和numpy数组一样的广播效应,

Series的索引会默认找到Dataframe中匹配的,然后竖直方向传播。如果Series的索引在Dataframe的列索引中不存在,则Dataframe和Series会被重新索引,新的列索引是二者索引的并集,

运算后,匹配不上的结果会最终形成缺失值。

    如果想让Series的索引匹配Dataframe的索引,水平方向传播,那么就必须使用封装好的 add、sub、div和mul方法,并指定axis参数等于0。

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值