python中使用pandas数据库

python中使用pandas数据库

利用pandas进行数据分析,以及试用一下jupyter notebook

import pandas as pd
from pandas import DataFrame, Series

pandas中有两种基本数据类型,Series 和 DataFrame,Series就是带有index的序列,而DataFrame是可以定义index和column的标签的二维数据结构,有点类似于excel表格的样式。而excel表格也可以存成csv格式,然后用pandas的DataFrame读进来。

Series数据结构

先看Series数据结构:

s = Series(['jin','mu','shui','huo','tu'])
s
0     jin
1      mu
2    shui
3     huo
4      tu
dtype: object

Series有values和index两个属性,分别查看序列的值和序号,序号也是可以自定义的。

s.values
array(['jin', 'mu', 'shui', 'huo', 'tu'], dtype=object)
s.index
RangeIndex(start=0, stop=5, step=1)
s = Series(['jin','mu','shui','huo','tu'],index = ['autumn','spring','winter','summer','long summer'])
s
autumn          jin
spring           mu
winter         shui
summer          huo
long summer      tu
dtype: object
s = Series(s,index = ['autumn','spring','winter','summer','long summer','others'])
s
autumn          jin
spring           mu
winter         shui
summer          huo
long summer      tu
others          NaN
dtype: object

上面可以看出,添加一个index会增加一个value为NaN的项目。

s.isnull()
autumn         False
spring         False
winter         False
summer         False
long summer    False
others          True
dtype: bool
pd.isnull(s)
autumn         False
spring         False
winter         False
summer         False
long summer    False
others          True
dtype: bool
pd.notnull(s)
autumn          True
spring          True
winter          True
summer          True
long summer     True
others         False
dtype: bool
s['winter']
'shui'
s = Series({'winter':1,'summer':2,'spring':3})
s
spring    3
summer    2
winter    1
dtype: int64

用python的字典dict也能生成Series。然后Series可以相加,也可以定点赋值。

b = Series([67,78,89],index=['winter','summer','spring'])
b
winter    67
summer    78
spring    89
dtype: int64
s + b
spring    92
summer    80
winter    68
dtype: int64
s['spring'] = 89
s
spring    89
summer     2
winter     1
dtype: int64
s[s>1]
spring    89
summer     2
dtype: int64

总结,Series可以用list或者字典生成,其中包含index和对应的values,生成的时候前面是value后面的是index,可以不指定index,也可以自定义。可以对Series数据结构进行根据条件取出部分元素的操作,也可以不同的Series之间加减

DataFrame数据结构

DataFrame是二维的数据结构,存成矩阵,行叫做index,和Series一直,列叫做column。生成一个这样的数据体可以用一下的方法,就是字典的方法,其中字典的key对应于column,联想excel表格中的项目,是对应的。dict中的value用一个list表示,这个list就是DataFrame的key属性这一列的values。

df = DataFrame({'jin':[0.1,0.8,0.4],'mu':[0.5,0.7,0.6]})
df
jin mu
0 0.1
1 0.8
2 0.4
df = DataFrame({'jin':[0.1,0.8,0.4],'mu':[0.5,0.7,0.6]},index=['person1','person2','person3'])
df
jin mu
person1 0.1
person2 0.8
person3 0.4
df = DataFrame(df,columns=['jin','mu','shui','huo','tu'],index=['person1','person2','person3','person4'])
df
jin mu shui huo tu
person1 0.1 0.5 NaN NaN
person2 0.8 0.7 NaN NaN
person3 0.4 0.6 NaN NaN
person4 NaN NaN NaN NaN

提取某一个column,即某一个属性值。

df['jin']
person1    0.1
person2    0.8
person3    0.4
person4    NaN
Name: jin, dtype: float64
from numpy import arange
somecolumn = arange(0.1,0.8,0.3)
scln = Series(somecolumn,index = ['person1','person3','person4'])
df['shui'] = scln
df
jin mu shui huo tu
person1 0.1 0.5 0.1 NaN
person2 0.8 0.7 NaN NaN
person3 0.4 0.6 0.4 NaN
person4 NaN NaN 0.7 NaN

用DataFrame结构可以操作csv文件,并且获得其中的信息:

csv文件:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须象二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bit ASCII是最基本的通用编码。CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

trainpath = './titanic/train.csv'
testpath = './titanic/test.csv'
trainset = pd.read_csv(trainpath)
trainset.head() # 看看前几行的内容
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th… female 38.0 1 0 PC 17599 71.2833 C85
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN
type(trainset)
pandas.core.frame.DataFrame
trainset.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
trainset.shape
(891, 12)
trainset.describe()
PassengerId Survived Pclass Age SibSp Parch Fare
count 891.000000 891.000000 891.000000 714.000000 891.000000 891.000000
mean 446.000000 0.383838 2.308642 29.699118 0.523008 0.381594
std 257.353842 0.486592 0.836071 14.526497 1.102743 0.806057
min 1.000000 0.000000 1.000000 0.420000 0.000000 0.000000
25% 223.500000 0.000000 2.000000 20.125000 0.000000 0.000000
50% 446.000000 0.000000 3.000000 28.000000 0.000000 0.000000
75% 668.500000 1.000000 3.000000 38.000000 1.000000 0.000000
max 891.000000 1.000000 3.000000 80.000000 8.000000 6.000000

数据基本样貌已经了解,接下来可以利用pandas结合seaborn和matplotlib等库函数对数据进行EDA(exploratory data analysis),深入了解数据样态,并为后续处理做准备。

posted @ 2018-02-21 20:38  毛利小九郎  阅读(126)  评论(0编辑  收藏  举报