pandas统计分析基础(一)

读取数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df_obj = {'name':['张三','李四','王二'],'age':[12,15,16]}
df = pd.DataFrame(df_obj)  #将数据转化为dataFrame
df.to_csv('student.csv',index=False) #将数据写入csv文件
df1 = pd.read_csv('student.csv')  #将数据从文件中读出来
print(type(df))  #输出类型
print(df)    #输出数据
print(df1)

输出结果

<class 'pandas.core.frame.DataFrame'>
  name  age
0   张三   12
1   李四   15
2   王二   16
  name  age
0   张三   12
1   李四   15
2   王二   16

序列(Series)

类似一维数组的对象
序列
数据结构 -- Series
• 由数据和索引组成
• 索引在左,数据在右
• 索引是自动创建的

image.png

创建序列

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

gdp1 = pd.Series([2.8,3.01,8.99,8.95,5.18])
gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':'8.99','江苏':'8.95','浙江':5.18})
gdp3 = pd.Series(np.array((2.8,3.01,8.99,8.95,5.18)))
print(gdp1)
print(gdp2)
print(gdp3)

输出结果

0    2.80
1    3.01
2    8.99
3    8.95
4    5.18
dtype: float64
北京     2.8
上海    3.01
广东    8.99
江苏    8.95
浙江    5.18
dtype: object
0    2.80
1    3.01
2    8.99
3    8.95
4    5.18
dtype: float64

获取数据和索引

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

gdp1 = pd.Series([2.8,3.01,8.99,8.95,5.18])
gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':'8.99','江苏':'8.95','浙江':5.18})
gdp3 = pd.Series(np.array((2.8,3.01,8.99,8.95,5.18)))

print(gdp1.index)  #获取索引
print(gdp1.values) #获取数据

print(gdp2.index)

输出结果

RangeIndex(start=0, stop=5, step=1)
[2.8  3.01 8.99 8.95 5.18]
Index(['北京', '上海', '广东', '江苏', '浙江'], dtype='object')

获取索引名和数据名

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':'8.99','江苏':'8.95','浙江':5.18},
                 name='gdp')
gdp2.index.name='city'
print(gdp2)

输出结果

city
北京     2.8
上海    3.01
广东    8.99
江苏    8.95
浙江    5.18
Name: gdp, dtype: object

Series数据的增删查改

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':'8.99','江苏':'8.95','浙江':5.18},
                 name='gdp')
#通过索引名获取数据
print(gdp2['北京'])
#通过loc获取数据
print(gdp2.loc['北京'])
#修改数据
gdp2['北京'] = 3.2
print(gdp2)
#增加数据
gdp2['四川'] = 3.5
print(gdp2)
#删除数据
gdp = gdp2.drop('北京')
print(gdp)

输出结果

2.8
2.8
北京     3.2
上海    3.01
广东    8.99
江苏    8.95
浙江    5.18
Name: gdp, dtype: object
北京     3.2
上海    3.01
广东    8.99
江苏    8.95
浙江    5.18
四川     3.5
Name: gdp, dtype: object
上海    3.01
广东    8.99
江苏    8.95
浙江    5.18
四川     3.5
Name: gdp, dtype: object

Series索引操作

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

gdp = pd.Series({'北京':2.8,'上海':3.01,'广东':'8.99','江苏':'8.95','浙江':5.18},
                 name='gdp')
#行索引
print(gdp['北京'])
print(gdp.loc['北京'])

#切片索引
print(gdp['北京':'广东'])

#不连续索引
print(gdp[['北京','广东']])

输出结果

2.8
2.8
北京     2.8
上海    3.01
广东    8.99
Name: gdp, dtype: object
北京     2.8
广东    8.99
Name: gdp, dtype: object

DataFrame

• 类似多维数组/表格数据 (如,excel, R中的data.frame)
• 每列数据可以是不同的类型
• 索引包括行索引(index)和列索引(label/column)

image.png
image.png

创建DataFrame

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#通过嵌套的列表创建
df1 = pd.DataFrame([['张三',23,'男'],['李四',27,'女'],['王二',26,'女']])
#通过字典构造
df2 = pd.DataFrame(
                   {'姓名':['张三','李四','王二'],
                    '年龄':[23,27,26],
                    '性别':['男','女','男']}
                   )
#通过二维数组构造
df3 = pd.DataFrame(np.array([['张三','23','男'],['李四','27','女'],['王二','26','女']]))
print(df1)
print(df2)
print(df3)

输出结果

    0   1  2
0  张三  23  男
1  李四  27  女
2  王二  26  女
   姓名  年龄 性别
0  张三  23  男
1  李四  27  女
2  王二  26  男
    0   1  2
0  张三  23  男
1  李四  27  女
2  王二  26  女

DataFrame查询

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#通过字典构造
df = pd.DataFrame(
                   {'姓名':['张三','李四','王二'],
                    '年龄':[23,27,26],
                    '性别':['男','女','男']}
                    ,index=['A','B','C']
                   )

#查询一列
print(df['姓名'])
#查询某一列中第几行
print(df['姓名'][0:1])
#查询多列数据
print(df[['姓名','性别']][0:2])
#查询某几行
print(df[:][0:2])
#loc方式(分别代表行列)
print(df.loc[['A','B'],'姓名'])
print(df.loc['A':'B','姓名'])
#iloc方式
print(df.iloc[0:2,0:2])

输出结果

A    张三
B    李四
C    王二
Name: 姓名, dtype: object
A    张三
Name: 姓名, dtype: object
   姓名 性别
A  张三  男
B  李四  女
   姓名  年龄 性别
A  张三  23  男
B  李四  27  女
A    张三
B    李四
Name: 姓名, dtype: object
A    张三
B    李四
Name: 姓名, dtype: object
   姓名  年龄
A  张三  23
B  李四  27

修改数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#通过字典构造
df = pd.DataFrame(
                   {'姓名':['张三','李四','王二'],
                    '年龄':[23,27,26],
                    '性别':['男','女','男']}
                    ,index=['A','B','C']
                   )

#修改数据
df['姓名']['A']='麻子'
print(df['姓名']['A'])
print(df)

输出结果

麻子
   姓名  年龄 性别
A  麻子  23  男
B  李四  27  女
C  王二  26  男

新增数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#通过字典构造
df = pd.DataFrame(
                   {'姓名':['张三','李四','王二'],
                    '年龄':[23,27,26],
                    '性别':['男','女','男']}
                    ,index=['A','B','C']
                   )

#添加数据
df1 = df.reindex(index=['A','B','C','D'],columns=['姓名','年龄','性别','爱好'])
df1.loc['A':'D','爱好'] = '读书'
df1.loc['D','姓名'] = '麻子'
df1.loc['D','年龄'] = 29
df1.loc['D','性别'] = '男'
df1.loc['D','爱好'] = '读书'
print(df1)

输出结果

   姓名    年龄 性别  爱好
A  张三  23.0  男  读书
B  李四  27.0  女  读书
C  王二  26.0  男  读书
D  麻子  29.0  男  读书

删除数据

image.png
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#通过字典构造
df = pd.DataFrame(
                   {'姓名':['张三','李四','王二'],
                    '年龄':[23,27,26],
                    '性别':['男','女','男']}
                    ,index=['A','B','C']
                   )

#删除数据,axis=0代表行,1代表列
df.drop('姓名',axis=1,inplace=True)
print(df)

输出结果

   年龄 性别
A  23  男
B  27  女
C  26  男

常用统计方法

describe(),快速查看每列数据的统计信息

image.png
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#通过字典构造
df = pd.DataFrame(
                   {'姓名':['张三','李四','王二'],
                    '年龄':[23,27,26],
                    '性别':['男','女','男']}
                    ,index=['A','B','C']
                   )

print(df['年龄'].describe())

输出结果

count     3.000000
mean     25.333333
std       2.081666
min      23.000000
25%      24.500000
50%      26.000000
75%      26.500000
max      27.000000
Name: 年龄, dtype: float64

pandas时间相关的操作

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
#时间
myTime = dt.time(12,24,56)
print(myTime)
print(myTime.hour)
#日期
mydate = dt.datetime(year=2018,month=3,day=3,hour=3)
print(mydate)
#当前系统时间
print(dt.datetime.now())
print(dt.datetime.today())

#字符串转时间
str = '2008/5/13'
print(pd.to_datetime(str))

输出结果

12:24:56
12
2018-03-03 03:00:00
2020-06-18 02:25:07.596312
2020-06-18 02:25:07.596313
2008-05-13 00:00:00
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345