pandas是一个第三方数据分析库,其集成了大量的数据模型和分析工具,可以方便的处理和分析各类数据。其中主要对象类型有Series,DataFrame和Index。本文介绍DataFrame对象的基本创建方法。

关于DataFrame的基础用法,可以查看下面的文章:
Python 利用pandas处理CSV文件(DataFrame的基础用法)

一、DataFrame的创建方法

DataFrame是包含索引的二维数据结构,数据结构和Excel或关系型数据库的表非常类似。重点是其在行、列上都是有标签的,其中纵向的标签叫做索引标签(定位每一行),横向的标签叫做列标签(定位每一列),标签也是Pandas中一种对象类型(Index对象)。
在这里插入图片描述

1.1 通过Python序列对象创建

Pandas中的的DataFrame函数可以将其他对象转换为DataFrame对象,传入列表或元组即可得到一个DataFrame对象(首次使用需要导入pandas):

import pandas as pd
df = pd.DataFrame([1,2,'a'])

在这里插入图片描述

这里看起来和Series很像,但注意DataFrame是包含列标签的,对比Series看一下区别:

s = pd.Series([1,2,'a']) 

在这里插入图片描述

创建一个二维DataFrame,默认索引标签和列标签都是从0开始方差为1的等差数列(0,1,2,3…):

df = pd.DataFrame([[1,2,3], [4,5,6]])

在这里插入图片描述

通过传入index和columns参数可以显式指定索引标签和列标签(为行和列命名,方便引用):

df = pd.DataFrame([[1,2,3], [4,5]], index=['a','b'], columns=['x','y','z'])

在这里插入图片描述

1.2 通过Python字典对象创建

通过Python字典创建DataFrame时,字典的键默认会变为列标签,索引标签为数字:

d = {'x':[1,2,3], 'y':[4,5,6]}
df = pd.DataFrame(d)

在这里插入图片描述

如果字典的值是Series,那么Series的标签会成为DataFrame的索引标签:

s1 = pd.Series([1,2,3], index=['a','b','c'])
s2 = pd.Series([4,5,6], index=['b','c','d'])
d = {'x':s1, 'y':s2}
df = pd.DataFrame(d)

在这里插入图片描述
可以看到DataFrame会包含s1和s2的所有标签,另一个Series中不存在的标签会使用NaN(Not a Number)填充。

我们可以把DataFrame看作由Series组成的字典,每一列都是一个Series,用字典的方式引用列标签就可以得到Series:

df['x']

在这里插入图片描述

1.3 空值导致的类型转换

这里有个小问题,我们创建的时候传入数字都是整型,为什么最终的DataFrame中变成了浮点型(float64)?答案是这里填入了NaN(即np.nan),这是NumPy中一个特殊的浮点类型,代表数字类型的空值,而Series是同构的,因此为了兼容NaN,需要将数据类型向高级的转换,所以整列的类型都变成了浮点型。

如果s1包含’d’索引,就不会出现这种转换,和上面的例子对比一下区别:

s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])
s2 = pd.Series([4,5,6], index=['b','c','d'])
d = {'x':s1, 'y':s2}
df = pd.DataFrame(d)
df['x'].dypte
df['y'].dypte

在这里插入图片描述
x列由于不需要填充NaN,保留了整型(int64),而y列需要填入NaN,整列都被转换为浮点型(float64)。

1.4 通过其他函数创建

上面都是通过手搓的方式创建DataFrame,实际数据分析中我们较少使用这种方式,更常见的方式是从文件中读取数据转换为DataFrame对象。Pandas的read_csv, read_execl等函数可以从对应的文件格式中读取数据并返回DataFrame对象,在数据分析中更加常用,具体操作方法可以参考文首的链接。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐