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)

输出结果


  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

你可能感兴趣的:(pandas统计分析基础(一))