零基础学习Python数据分析:数据处理模块Pandas使用(1)

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

在这一Lesson的最后,你将了解如何提取或创建数据表、汇总数据和使用合并从多个表中合并数据。本单元包含三个Lesson。

Unit 2 Data Manipulation with Pandas

Lesson one——Creating, Loading, and Manipulating Data with Pandas

一、使用Pandas创建、加载和操作数据

本节中,我们将学习如何创建Pandas中最基本的data type——DataFrame以及如何从中选择数据子集。Pandas适用于处理各种Tabular data(表列数据)。

首先python里需要有pandas模块,如果忘了怎么安装,可以查看文章Dragee的学习笔记1:超简单!Python安装matplotlib等模块 进行安装。

然后最基本的一步是导入Pandas:

import pandas as pd

一个DataFrame是一个存储表列数据的对象。可以想像为一个Spreadsheet或SQL Table。你可以手动创建一个DataFrame,或直接从CSV文件,Excel电子表格,或SQL query里填充数据。

一个DataFrame有行Row,也有列Column。每个列都有一个名称Name,它是一个字符串String。每行有一个索引Index,这是一个整数Integer。DataFrame可以包含许多不同的数据类型:字符串,整数,浮点数,元组,等。

1.创建一个DataFrame

方法一:

import pandas as pd
df1 = pd.DataFrame({
    'name': ['John Smith', 'Jane Doe', 'Joe Schmo'],
    'address': ['123 Main St.', '456 Maple Ave.', '789 Broadway'],
    'age': [34, 28, 51]
})
print df1

方法二:

import pandas as pd
df1 = pd.DataFrame([
    ['John Smith', '123 Main St.', 34],
    ['Jane Doe', '456 Maple Ave.', 28],
    ['Joe Schmo', '789 Broadway', 51]
    ],
    columns=['name', 'address', 'age'])
print df2

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

二、导入数据

介绍一下CSV文件

CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

例如,一个用户可能需要交换信息,从一个以私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据库程序可以导出数据为“CSV”,然后被导出的CSV文件可以被电子表格程序导入。

“CSV”并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:

1.纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;

2.由记录组成(典型的是每行一条记录);

3.每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);

4.每条记录都有同样的字段序列。

例:csv文件第一行为列名

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》
《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

Ps.Excel文件就可以保存为csv格式

如果你有一个csv格式的文件,导入数据用到的语句为.read_csv(),储存数据则用到.to_csv

import pandas as pd
pd.read_csv('sample.csv')
df=pd.read_csv('sample.csv')
df.to_csv('sample.csv')
print(df)

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》
《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

如果是大型数据集,print显示出来可能不太现实。df.head()可以给出前五行数据,df.head(10)可以显示十行,以此类推。

使用print(http://df.info())可以给出我们一些数据基本信息。

import pandas as pd
df = pd.read_csv('imdb.csv')
df.to_csv('imdb.csv')
print(df.head())
print(df.info())

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

三、选取数据

1.选择列数据

怎么选择一列数据呢?例如一个DataFrame代表由统一组织运营的四家诊所。每一行代表从一月到六月的每个月四个不同诊所的预约人数。

import pandas as pd

df = pd.DataFrame([
  ['January', 100, 100, 23, 100],
  ['February', 51, 45, 145, 45],
  ['March', 81, 96, 65, 96],
  ['April', 80, 80, 54, 180],
  ['May', 51, 54, 54, 154],
  ['June', 112, 109, 79, 129]],
  columns=['month', 'clinic_east',
           'clinic_north', 'clinic_south',
           'clinic_west']
)

如果想要分析clinic_north的情况,有两种方法:

clinic_north=df.clinic_north

clinic_north=df['clinic_north']

选择完成后,可以使用语句

print(type(clinic_north))

查看所选择数据data type。

那么,怎么选择多列数据?还是上面的例子,想比较下clinic_north和clinic_north的顾客预约数量。

clinic_north_south=df[['clinic_north','clinic_south']]
print(type(clinic_north_south))

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

2.选择行数据

语句关键词loc.

上例中,想选择三月份的各家医院预约人数看一看,并将选择的行定义为新变量march:

import pandas as pd

df = pd.DataFrame([
  ['January', 100, 100, 23, 100],
  ['February', 51, 45, 145, 45],
  ['March', 81, 96, 65, 96],
  ['April', 80, 80, 54, 180],
  ['May', 51, 54, 54, 154],
  ['June', 112, 109, 79, 129]],
  columns=['month', 'clinic_east',
           'clinic_north', 'clinic_south',
           'clinic_west']
)
march=loc[2]

Ps. DataFrame中第一行数据序号为0.

同样的,选择多行数据,

March_to_June=df.loc[2:5]

(选择3月到5月的数据)

After_March=df.loc[2:]

(4月到6月的数据,不包括3月份)

Before_March=df.loc[:2]
print(Before_March)

(1&2月份数据)

三、使用条件语句选择行

同样的,可以使用Logic语句选择行,这更加利于数据的筛选选择。类似于SQL语句SELECT FROM WHERE

假如我要从员工数据中,选择出年龄为30岁的所有员工:staff为DataFrame名

staff[staff.age==30]

选择年龄大于30的员工:

staff[staff.age>30]

选择年龄小于30的员工:

staff[staff.age<30]

选择除员工Clara Oswald的所有行:

df[df.name != 'Clara Oswald']

!= 表示不等

只要每个语句都在括号中,也可以组合多个逻辑语句。

假设我们希望选择员工年龄在30以下或姓名为“Martha Jone”的所有行:

variable=df[(df.age < 30) | (df.name == 'Martha Jones')]
print(variable)

在 Python中 | 代表 “或” , & 代表 “并且 “.

另外,可以使用isin命令选择符合条件的行(选择’Martha Jones’,”Rose Tyler’,’Amy Pond’员工)

variable=df[df.name.isin(['Martha Jones',
     'Rose Tyler',
     'Amy Pond'])]
print(variable)

因为DataFrame每行数据都有索引,用logic语句选择后,行索引就打乱了

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》
《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

语句.reset_index(),就能重新排列行,得到一个新的DataFrame:

df.reset_index()

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》
《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

但是会把原来的Index也做成一列,这时需要删掉这一列,生成新的DataFrame

df.reset_index(drop=True)

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

如果我们想要这种操作是在原来的DataFrame上进行修改,用inplace=True

df2.reset_index(inplace = True)
#df.reset_index()

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》
《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

如果对这段不是很懂可以参考这段代码及其结果

import pandas as pd

df = pd.DataFrame([
  ['January', 100, 100, 23, 100],
  ['February', 51, 45, 145, 45],
  ['March', 81, 96, 65, 96],
  ['April', 80, 80, 54, 180],
  ['May', 51, 54, 54, 154],
  ['June', 112, 109, 79, 129]],
  columns=['month', 'clinic_east',
           'clinic_north', 'clinic_south',
           'clinic_west']
)

df2 = df.loc[[1, 3, 5]]
print(df2)

df3 = df2.reset_index()
print(df3)

df4 = df2.reset_index(drop=True)
print(df4)

df5 = df2.reset_index(inplace=True)
print(df5)

df6 = df2.reset_index(drop=True,inplace=True)
print(df6)

df7 = df2.reset_index(inplace=True,drop=True)
print(df7)

《零基础学习Python数据分析:数据处理模块Pandas使用(1)》
《零基础学习Python数据分析:数据处理模块Pandas使用(1)》

Note that the old indices have been moved into a new column called 'index'. Unless you need those values for something special, it’s probably better to use the keyword drop=True so that you don’t end up with that extra column. If we run the command df.reset_index(drop=True),

Using .reset_index() will return a new DataFrame, but we usually just want to modify our existing DataFrame. If we use the keyword inplace=True we can just modify our existing DataFrame.

    原文作者:Dragee
    原文地址: https://zhuanlan.zhihu.com/p/33491186
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞