前情提要:
【pandas的常用数据类型】
(1 )Series一维,带标签数组
(2 )DataFrame二维,Series容器
【DataFrame对象既有行索引,又有列索引】
(1 )列索引,表明不同列,纵向索引,叫columns,1 轴,axis= 1 (表现为行)
(2 )行索引,表明不同行,横向索引,叫inde,0 轴,axis= 0 (表现为列)
【问题1 】pandas之DataFrame的创建
'''
有2个问题:
(1)DataFrame和Series有什么关系?
* DataFrame的每一行或者每一列,都是Series
(2)Series能够传入字典,那么DataFrame能够传入字典作为数据么?那么Mongodb的数据是不是也可以这样传入呢?
* 列索引(axis=1,行) -----> 字典的键
行索引(axis=0,列)-----> 序号0,1,2...
* 字典会根据键(key)的顺序进行排序
* pymongo是mongodb的python库,首先电脑里得有MongoDB数据库。这个学不学随意,也可以直接用mysql
'''
'''
DataFrame对象既有行索引,又有列索引:
(1)列索引,axis=1,叫columns
(2)行索引,axis=0,叫index
'''
import pandas as pd
import numpy as np
import string
t1 = pd. DataFrame( np. arange( 12 ) . reshape( 3 , 4 ) )
print ( t1)
t2 = pd. DataFrame( np. arange( 12 ) . reshape( 3 , 4 ) , index= list ( 'abc' ) , columns= list ( 'WXYZ' ) )
print ( t2)
t3 = pd. DataFrame( np. arange( 12 ) . reshape( 3 , 4 ) , index= list ( string. ascii_uppercase[ : 3 ] ) , columns= list ( string. ascii_uppercase[ - 4 : ] ) )
print ( t3)
print ( '**(1)**' * 10 )
'''
字典:
(1)一个键对应多个值
(2)一个键对应一个值
'''
d1 = {
'name' : [ 'xiaoming' , 'xiaogang' ] , 'age' : [ 20 , 32 ] , 'tel' : [ 10086 , 10010 ] }
t1 = pd. DataFrame( d1)
print ( t1)
print ( type ( t1) )
d2 = [ {
'name' : 'xiaohong' , 'age' : 32 , 'tel' : 10010 } , {
'name' : 'xiaogang' , 'tel' : 10086 } , {
'name' : 'xiaowang' , 'age' : 18 } ]
t2 = pd. DataFrame( d2)
print ( d2)
print ( t2)
print ( '**(2)**' * 10 )
'''
data = [{ },{ },{ }]
'''
from pymongo import MongoClient
import pandas as pd
client = MongoClient( )
collection = client[ 'douban' ] [ 'tv1' ]
data = list ( collection. find( ) )
df = pd. DataFrame( data)
print ( df)
'''
(1)读取到的data = [{ },{ },{ }]
(2)find()是mongodb查询整个集合(表)
(3)本操作的意思是:先遍历,取出想要的值放进一个大字典,再把这个大字典存入list列表中
'''
from pymongo import MongoClient
import pandas as pd
client = MongoClient( )
collection = client[ 'douban' ] [ 'tv1' ]
data = collection. find( )
data_list = [ ]
for i in data:
temp = {
}
temp[ 'info' ] = i[ 'info' ]
temp[ 'rating_count' ] = i[ 'rating' ] [ 'count' ]
temp[ 'rating_value' ] = i[ 'rating' ] [ 'value' ]
temp[ 'title' ] = i[ 'title' ]
temp[ 'country' ] = i[ 'tv_category' ]
temp[ 'directors' ] = i[ 'directors' ]
temp[ 'actors' ] = i[ 'actors' ]
data_list. append( temp)
df = pd. DataFrame( data_list)
print ( df)
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
W X Y Z
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
W X Y Z
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
**(1)****(1)****(1)****(1)****(1)****(1)****(1)****(1)****(1)****(1)**
name age tel
0 xiaoming 20 10086
1 xiaogang 32 10010
<class 'pandas.core.frame.DataFrame'>
[{'name': 'xiaohong', 'age': 32, 'tel': 10010}, {'name': 'xiaogang', 'tel': 10086}, {'name': 'xiaowang', 'age': 18}]
name age tel
0 xiaohong 32.0 10010.0
1 xiaogang NaN 10086.0
2 xiaowang 18.0 NaN
**(2)****(2)****(2)****(2)****(2)****(2)****(2)****(2)****(2)****(2)**
【问题2 】DataFrame的描述信息
(1 )DataFrame的基础属性
df. shape 行数,列数
df. dtypes 列数据类型
df. ndim 数据维度
df. index 行索引
df. columns 列索引
df. values 对象值,二维ndarray数组
(2 )DataFrame整体情况查询
df. head(3 ) 显示前几行,默认5 行
df. tail(3 ) 显示后几行,默认5 行
df. info( ) 相关信息概览:行数,列数,列索引,列非空值个数,列类型,内存占用
df. describe() 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
import pandas as pd
import numpy as np
t = [ {
'name' : 'xiaohong' , 'age' : 32 , 'tel'</