Pandas教程——(一)

本次教程你将学会以下几点:

  1. 导包
  2. 自己创建数据
  3. 由数据创建frames对象
  4. 将数据集以csv格式导出
  5. 从csv文件读取
  6. 分析数据(找最大值)
  7. 展现数据

导包

# Import all libraries needed for the tutorial
# General syntax to import specific functions in a library: 
##from (library) import (specific library function)
from pandas import DataFrame, read_csv
# General syntax to import a library but no functions: 
##import (library) as (give the library a nickname/alias)
import matplotlib.pyplot as plt
import pandas as pd #this is how I usually import pandas
import sys #only needed to determine Python version number
import matplotlib #only needed to determine Matplotlib version number
# Enable inline plotting
%matplotlib inline

print('Python version ' + sys.version)
print('Pandas version ' + pd.__version__)
print('Matplotlib version ' + matplotlib.__version__)
python的版本为3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609]
pandas的版本为0.24.2
matplotilib的版本为3.0.3

创建数据

# The inital set of baby names and birth rates
names = ['Bob','Jessica','Mary','John','Mel']
births = [968, 155, 77, 578, 973]
BabyDataSet = list(zip(names,births))
print(BabyDataSet)
[('Bob', 968), ('Jessica', 155), ('Mary', 77), ('John', 578), ('Mel', 973)]

我们已经创建了一个数据集BabyDataSet,由名字和出生日两个字段组成,下面将用padas库将此数据集导出到csv文件中。

df = pd.DataFrame(BabyDataSet,columns=['姓名','出生日'])
print(df)
        姓名  出生日
0      Bob    968
1  Jessica    155
2     Mary    77
3     John    578
4      Mel    973

df是一个pandas的DataFrame对象,你可以将它类似于SQL表或Excel表格的格式。下面看看df的一些操作。

df.to_csv('test.csv',index=False,header=False)

我们使用to_csv方法将数据集导出到test.csv文件内,并且设置唯一参数index、header的值为False,以此来阻止导出索引和标头名称,这方便我们后面理解它们的使用。下面是我们导出的test.csv文件内容:

读取数据

File_path = '/home/bd/pandas_lesson/test.csv'
df = pd.read_csv(File_path)
print(df)
       Bob  968
0  Jessica  155
1     Mary   77
2     John  578
3      Mel  973

我们使用read_csv方法读取test.csv文件,发现它自动将第一条数据当作表头名称,这样就造成了一定的数据混乱。为阻止这个行为,我们可以在读取时加入一个参数header = None。

df = pd.read_csv(File_path,header=None)
print(df)
         0    1
0      Bob  968
1  Jessica  155
2     Mary   77
3     John  578
4      Mel  973

可以发现,我们虽然阻止了它将第一条记录当成标头的行为,但它默认的标头是默认的数字0、1,太丑了。我们还可以在读取的时候加入参数names自定义标头名字。

df = pd.read_csv(File_path,header=None,names = ['姓名','出生日'])
print(df)
        姓名  出生日
0      Bob  968
1  Jessica  155
2     Mary   77
3     John  578
4      Mel  973

下面我们将test.csv文件删掉。

import os
os.remove(File_path)

分析数据

DateFrame对象提供了dtypes属性,他可以用来查看所有列或指定列的数据类型。

print(df.dtypes)
姓名     object
出生日     int64
dtype: object
print("出生日的数据类型:{}".format(df.出生日.dtype))
print("姓名的数据类型:{}".format(df.姓名.dtype))
出生日的数据类型:int64
姓名的数据类型:object

DateFrame对象提供了一个对数据进行排序的方法:sort_values(),它可以指定一个或多个列名来进行正序或逆序的排序。DateFrame对象的head(num)方法用于展示前num条数据,于tail(()方法相反。

sorted = df.sort_values(['出生日'],ascending=False)
print(sorted.head(2))
    姓名  出生日
4  Mel  973
0  Bob  968

sort_values()方法参数ascending用于指定是正序还是逆序。DateFrame对象还提供了max()、min()方法来查询某一列的最大值、最小值。

print(df['出生日'].max(),df['出生日'].min())
973 77

展示数据

df['出生日'].plot()
# Maximum value in the data set
MaxValue = df['出生日'].max()

# Name associated with the maximum value
MaxName = df['姓名'][df['出生日'] == df['出生日'].max()].values
MaxNane_index = df['姓名'][df['出生日'] == df['出生日'].max()].index[0]
Text = str(MaxValue) + " - " + MaxName

# Add text to graph
plt.annotate(Text, xy=(MaxNane_index, MaxValue), xytext=(MaxNane_index+1, MaxValue), 
                 arrowprops=dict(facecolor='black', shrink=0.05))

df['出生日'].plot()方法用于将标头为出生日的一列数据以图的形式表现出来,X轴对应每一行的索引号。

df['出生日']表示出生日这一列的数据。

print(df['出生日'])
0    968
1    155
2     77
3    578
4    973
Name: 出生日, dtype: int64

df['姓名']表示标头为姓名这一列数据。

df['出生日'].max()表示出生日那一列中值最大的那条记录。

[df['出生日'] == df['出生日'].max()]等价于从所有标头为“出生日”的列中,找值最大的,返回结果如下:

print([df['出生日'] == df['出生日'].max()])
[0    False
1    False
2    False
3    False
4     True
Name: 出生日, dtype: bool]

df['姓名'][df['出生日'] == df['出生日'].max()]表示从所有标头为“出生日”的列中,找值最大,但返回的结果是值最大那行中标名为名字的记录。可以通过属性value直接取出值,返回列表。

print(df['姓名'][df['出生日'] == df['出生日'].max()])
4    Mel
Name: 姓名, dtype: object
print(df['姓名'][df['出生日'] == df['出生日'].max()].values)
['Mel']

与属性values相照应的是index,他会返回对应行的索引,可通过下标0直接取值。

print((df['姓名'][df['出生日'] == df['出生日'].max()].index)[0])
4

plt.annotate()方法用于给图表标注。在标注中,有两个要考虑的点:由参数xy表示的标注位置和xytext的文本位置。 这两个参数都是(x, y)元组。arrowprops= {facecolor= '颜色',shrink = '数字' <1 收缩箭头}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值