pandas 终极版1:创建和查看DataFrame数据 mysql读取数据

本文介绍了pandas中的核心数据结构Series和DataFrame,详细讲解了如何利用二维数组创建DataFrame,以及如何读取Excel和TXT文件。此外,还探讨了查看DataFrame数据类型的方法,并提到了从MySQL数据库读取数据的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame。Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其可通过索引标签的方式获取数据,还具有索引的自动对齐功能;DataFrame类似于numpy中的二维数组,同样可以通用numpy数组的函数和方法,而且还具有其他灵活应用。

一、首先是引入pandas和numpy,这是经常配合使用的两个包,pandas依赖于numpy,引入以后我们可以直接使用np/pd来表示这个两个模块。     

In [1]: import numpy as np
In [2]: import pandas as pd

1)通过二维数组创建数据框,我们看一下如何创建一个6X4的数据:randn函数用于创建随机数,参数表示行数和列数,dates创建的索引列。

In [3]: dates = pd.date_range('20170808',periods=6)

In [4]: dates
Out[4]: 
DatetimeIndex(['2017-08-08', '2017-08-09', '2017-08-10', '2017-08-11',
               '2017-08-12', '2017-08-13'],
              dtype='datetime64[ns]', freq='D')

In [5]: df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))

In [6]: df
Out[6]: 
                   A         B         C         D
2017-08-08 -0.251957  1.408053 -0.085674  0.365377
2017-08-09 -0.141047  0.445702 -0.560573  0.251600
2017-08-10 -0.218148  1.619402 -1.799525 -0.697128
2017-08-11 -0.542612 -1.401814 -0.158879  0.969136
2017-08-12  0.268779 -1.376531  0.950630 -1.041401
2017-08-13  0.488717 -0.267509  0.112117 -1.166227
2)通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:索引是自动创建的整数

In [7]: df1 = pd.DataFrame({'姓名':["李小强","孙三","王玲","刘老四"],
   ...:     ...:                     '入学日期':pd.Timestamp('20170901'),
   ...:     ...:                     '性别':["男","男","女","男"],
   ...:     ...:                     '年龄':pd.Series([15,16,13,18],dtype='int32'),
   ...:     ...:                     '排名':np.array([1,3,2,4],dtype='float32'),
   ...:     ...:                     '是否':'yes'})

In [8]: df1
Out[8]: 
        入学日期   姓名  年龄 性别   排名   是否
0 2017-09-01  李小强  15  男  1.0  yes
1 2017-09-01   孙三  16  男  3.0  yes
2 2017-09-01   王玲  13  女  2.0  yes
3 2017-09-01  刘老四  18  男  4.0  yes

  3)读取外部文件csv,excel,txt


In [9]: df2 = pd.read_csv("/home/soft/st.csv",encoding='gbk')

In [10]: df2
Out[10]: 
    姓名      入学日期 性别  年龄  排名   是否
0  李小强  2017-9-1  男  15   1  yes
1   孙三  2017-9-1  男  16   3  yes
2   王玲  2017-9-1  女  13   2  yes
3  刘老四  2017-9-1  男  18   4  yes
注意:有一个编码问题。encoding='gbk'

读取excel文件,文件里有两个表。


In [11]: df3 = pd.read_excel("/home/soft/st.xlsx",sheetname=[0,1],skiprows=[0])

In [12]: df3
Out[12]: 
OrderedDict([(0,    孙小强 2017-09-01 00:00:00  男  25  4  no
              0  李小红          2017-09-01  女  16  1  no
              1  张爱玲          2017-09-01  女  23  3  no
              2  王老五          2017-09-01  男  19  2  no),
             (1,    孙强 2007-09-01 00:00:00  男  125  4  yes
              0  李红          2007-09-01  女  216  1   no
              1  张玲          2007-09-01  女  223  3  yes
              2  王五          2007-09-01  男  319  2   no)])
#sheetname指定为读取几个sheet,sheet数目从0开始

#skiprows=[0]代表读取跳过的行数第0行,不写代表不跳过标题

读取txt文件


In [13]: df4 = pd.read_table("/home/soft/st.txt",encoding='gbk',sep=',',index_col=1)

In [14]: df4
Out[14]: 
           姓名 性别  年龄  排名   是否
入学日期                         
2017-9-1  李小强  男  15   1  yes
2017-9-1   孙三  男  16   3  yes
2017-9-1   王玲  女  13   2  yes
2017-9-1  刘老四  男  18   4  yes
#index_col=1:设置第2列数据作为index

#sep=','以,为分隔符。

#header=None:没有每列的column name,可以自己设定


二、数据的查看

1.使用dtypes来查看各行的数据格式

In [15]: df1.dtypes
Out[15]: 
入学日期    datetime64[ns]
姓名              object
年龄               int32
性别              object
排名             float32
是否              object
dtype: object

2.使用head查看前几行数据(默认是前5行),使用tail查看后5行数据

In [16]: df.head(3)
Out[16]: 
                   A         B         C         D
2017-08-08 -0.251957  1.408053 -0.085674  0.365377
2017-08-09 -0.141047  0.445702 -0.560573  0.251600
2017-08-10 -0.218148  1.619402 -1.799525 -0.697128

In [17]: df1.tail(2)
Out[17]: 
        入学日期   姓名  年龄 性别   排名   是否
2 2017-09-01   王玲  13  女  2.0  yes
3 2017-09-01  刘老四  18  男  4.0  yes

3.显示索引、列和底层的numpy数据:

In [18]: df.index
Out[18]: 
DatetimeIndex(['2017-08-08', '2017-08-09', '2017-08-10', '2017-08-11',
               '2017-08-12', '2017-08-13'],
              dtype='datetime64[ns]', freq='D')

In [19]: df1.columns
Out[19]: Index([u'入学日期', u'姓名', u'年龄', u'性别', u'排名', u'是否'], dtype='object')

In [20]: df2.values
Out[20]: 
array([[u'\u674e\u5c0f\u5f3a', u'2017-9-1', u'\u7537', 15, 1, u'yes'],
       [u'\u5b59\u4e09', u'2017-9-1', u'\u7537', 16, 3, u'yes'],
       [u'\u738b\u73b2', u'2017-9-1', u'\u5973', 13, 2, u'yes'],
       [u'\u5218\u8001\u56db', u'2017-9-1', u'\u7537', 18, 4, u'yes']], dtype=object)

4.数据的快速统计汇总describe(),转置T。

In [21]: df.describe()
Out[21]: 
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean  -0.066044  0.071217 -0.256984 -0.219774
std    0.376911  1.319453  0.906105  0.869116
min   -0.542612 -1.401814 -1.799525 -1.166227
25%   -0.243504 -1.099276 -0.460149 -0.955333
50%   -0.179597  0.089097 -0.122276 -0.222764
75%    0.166322  1.167466  0.062669  0.336933
max    0.488717  1.619402  0.950630  0.969136

In [22]: df2.T
Out[22]: 
             0         1         2         3
姓名         李小强        孙三        王玲       刘老四
入学日期  2017-9-1  2017-9-1  2017-9-1  2017-9-1
性别           男         男         女         男
年龄          15        16        13        18
排名           1         3         2         4
是否         yes       yes       yes       yes

5.按轴进行排序和按值进行排序。

In [23]: df2.sort_index(axis=1,ascending=False)
Out[23]: 
    是否  排名 性别  年龄   姓名      入学日期
0  yes   1  男  15  李小强  2017-9-1
1  yes   3  男  16   孙三  2017-9-1
2  yes   2  女  13   王玲  2017-9-1
3  yes   4  男  18  刘老四  2017-9-1

In [24]: df.sort_values('B')
Out[24]: 
                   A         B         C         D
2017-08-11 -0.542612 -1.401814 -0.158879  0.969136
2017-08-12  0.268779 -1.376531  0.950630 -1.041401
2017-08-13  0.488717 -0.267509  0.112117 -1.166227
2017-08-09 -0.141047  0.445702 -0.560573  0.251600
2017-08-08 -0.251957  1.408053 -0.085674  0.365377
2017-08-10 -0.218148  1.619402 -1.799525 -0.697128

6.从mysql中读取数据,import MySQLdb

In [152]: conn=MySQLdb.connect(user="root",passwd="88888",host="192.168.2.245",db="school",charset="utf8")

In [153]: sql="select * from student limit 6"

In [154]: df = pd.read_sql(sql,conn)

In [155]: df
Out[155]: 
   id name  Age
0   1   陈二   21
1   2  张路路   25
2   3   王五   35
3   4   历时   45
4   5   李四   35
5   6   赵六   75
下面是数据库里的数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值