读取数据
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
• 由数据和索引组成
• 索引在左,数据在右
• 索引是自动创建的
创建序列
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)
创建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 男 读书
删除数据
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(),快速查看每列数据的统计信息
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