如何使用Python
如何使用Python Pandas模块读取各类型文件?
Pandas模块读取各类型文件?
Pandas 是基于tNumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型t,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
数据加载类型总览
Pandas加载csv文件
read_csv常用参数
headerNone 指定第几行作为列名(忽略注解行),如果没有指定列名,默认header0 如果指定了列名headerNonenames指定列名,如果文件中不包含header的行,应该显性表示headerNone,[A, B, C] 自定义列名index_col[A, B...] 给索引列指定名称,如果是多重索引,可以传listskiprows[0,1,2] 忽略某几行或者从开始算起的几行,默认从文件头0开始skip_footer从文件尾开始nrowsN 需要读取的行数,前N行chunksizeM 返回迭代类型TextFileReader,每M条迭代一次sep|指定分割符,默认,,如果不指定参数,会自动解析,C引擎不能自动检测分隔符,但Python解析引擎可以skip_blank_linesFalse 默认为True,跳过空行,如果选择不跳过,会填充NaNconverters{col1, func} 对选定列使用函数func转换,通常表示编号的列会使用(避免转换成int)encoding: 编码方式dtype: {‘a’: np.float64, ‘b’: } 指定数据类型
Pandas加载Json文件
read_json参数
path_or_buf 就是json文件路径或者json格式的字符串。orient 是表明预期的json字符串格式。orient的设置有以下几个值:split/index/columns/valuesorient 参数说明
split : dict like {index -gt [index], columns -gt [columns], data -gt [values]}。由索引,列字段、数据矩阵构成的json格式。key名称只能是index、columns、data,dump.json文件内容如下。
示例代码如下:
records : list like [{column -gt value}, ... , {column -gt value}]。由列字段为键,值为键值,每一个字典就构成了dataframe的一行数据,dump.json文件内容如下。
示例代码如下:
index : dict like {index -gt {column -gt value}}。以索引为键,以列字段与值构成的字典为键值。dump.json文件内容如下:
示例代码如下:
columns : dict like {column -gt {index -gt value}}。由列为键,对应一个值字典的对象。这个字典对象以索引为键,以值为键值构成的json字符串。dump.json文件内容如下:
示例代码如下:
values : just the values array。values这种我们就很常见了。就是一个嵌套的列表。里面的成员也是列表,2层的。dump.json文件内容如下
示例代码如下:
Pandas加载Excel文件
read_excel的主要参数
io : excel文档路径sheetname : 读取的excel指定的sheet页header :设置读取的excel第一行是否作为列名称skiprows : 省略指定行数的数据skip_footer :省略从尾部数的int行数据index_col :设置读取的excel第一列是否作为行名称names : 设置每列的名称,数组形式参数代码示例如下
如何上手使用科学计算库Numpy?
当我们使用Python进行数据分析时,有时可能需要根据DataFrame其他列中的值向pandas DataFrame添加一列。
尽管这听起来很简单,但是如果我们尝试使用if-else条件语句来做,可能会变得有些复杂。值得庆幸的是,有一种使用numpy做到这一点的简单,好方法!
要学习如何使用它,我们来看一个特定的数据分析问题。我们拥有4,000多个AAA教育推文的数据集。附有图像的推文会获得更多的赞和转发吗?让我们做一些分析找出答案!
我们将从导入pandas和numpy开始,并加载数据集以查看其外观。
我们可以看到我们的数据集包含有关每个推文的一些信息,包括:
1)date —推文发布的日期
2)time —发推文的时间
3)tweet -该推文的实际文本
4)mentions -推文中提及的任何其他Twitter用户
5)photos —推文中包含的任何图像的URL
6)replies_count -在推文上的回复数量
7)retweets_count -推文的转发数
8)likes_count —在推文上的喜欢次数
我们还可以看到photos数据的格式有些奇怪。
使用np.where()添加具有正确/错误条件的pandas列
对于我们的分析,我们只想查看带有图像的推文是否获得更多的交互,因此我们实际上不需要图像URL。让我们尝试创建一个名为的新列hasimage,该列将包含布尔值- True如果该tweet包含图像,False则不包含图像。
为此,我们将使用numpy的内置where()函数。此函数按顺序接受三个参数:我们要测试的条件,条件为true时分配给新列的值以及条件为false时分配给新列的值。看起来像这样:
在我们的数据中,我们可以看到没有图像的推文始终[]在该photos列中具有值。我们可以使用信息并np.where()创建新列hasimage,如下所示:
在上方,我们可以看到我们的新列已添加到我们的数据集,并且已正确标记了tweet,其中包括图像为True,其他图像为False。
现在我们有了hasimage专栏,让我们快速制作几个新的DataFrame,一个用于所有图像推文,一个用于所有无图像推文。我们将使用布尔过滤器进行此操作:
现在,我们已经创建了那些,我们可以使用内置的数学函数.mean()来快速比较每个DataFrame中的推文。
我们将使用print()语句使结果更易于阅读。我们还需要记住使用str()来将.mean()计算结果转换为字符串,以便可以在我们的打印语句中使用它:
根据这些结果,似乎包括图像可能会促进AAA教育的更多社群媒体的交互。有图片的推文的平均赞和转发次数是没有图片的推文的三倍。
添加条件更复杂的pandas专栏
这种方法效果很好,但是如果我们想添加一个条件更复杂的新列(超出True和False的条件)怎么办?
例如,为了更深入地研究这个问题,我们可能要创建一些交互性“层”,并评估到达每个层的推文所占的百分比。为了简单起见,让我们使用Likes来衡量交互性,并将tweet分为四个层次:
1)tier_4 -2个或更少的喜欢
2)tier_3 — 3-9个赞
3)tier_2 — 10-15个赞
4)tier_1 — 16个赞
为此,我们可以使用称为的函数()。我们给它两个参数:一个条件列表,以及一个我们想要分配给新列中每一行的值的对应列表。
这意味着顺序很重要:如果conditions满足列表中的第一个条件,则列表中的第一个值values将分配给该行的新列。大数据分析使用numpy在pandas dataframe上添加列如果满足第二个条件,则将分配第二个值,等等。
让我们看一下它在Python代码中的外观:
太棒了!我们创建了另一个新列,该列根据我们的(虽然有些武断)层排名系统对每个tweet进行了分类。
现在,我们可以使用它来回答有关我们的数据集的更多问题。例如:1级和4级推文中有多少百分比具有图像?
在这里,我们可以看到尽管图像似乎有所帮助,但它们似乎并不是成功所必需的。
尽管这是一个非常肤浅的分析,但我们已经在这里实现了我们的真正目标:根据有关现有列中值的条件语句向pandas DataFrames添加列。
当然,这是可以以多种方式完成的任务。np.where()而()只是许多潜在的两种方法。