五、 pandas统计与分析


pandas的具体介绍页面:http://pandas.pydata.org/

 

series     一维的数据结构

  series的元素可以被赋值

首先,

 

import pandas as pd
import numpy as np
# 可以看做一维数组 

sd = pd.Series([5, "tinghe", 3.17, 5.12, "i am happy",'julyedu'])

sd 

 

默认的下标是 0---n-1,直接根据下标去里面对应的内容,记得要加中括号,

也可以自己指定下标,如

sd = pd.Series([5, "tinghe", 3.17, 5.12, "i am happy",'xindongfangedu'], index=["A", "B", "C", "D", "E"])

sd

 

  

sd["A"]

输出   5

 

也可以使用字典dictionary  { }   注意字典的用法, 字符串,冒号:

cities = {"Beijing": 55000, "Shanghai": 60000, "Shenzhen": 50000,

     "Hangzhou": 20000, "Guangzhou": 30000, "Suzhou": None}
apts = pd.Series(cities, name="price")
apts
Beijing      55000.0
Guangzhou    30000.0
Hangzhou     20000.0
Shanghai     60000.0
Shenzhen     50000.0
Suzhou           NaN
Name: price, dtype: float64
# 以上写法等价于以下
# apts = pd.Series({"Beijing": 55000, "Shanghai": 60000, "Shenzhen": 50000,

#         "Hangzhou": 20000, "Guangzhou": 30000, "Suzhou": None}, name="price")
# apts

 

  

apts[ "Guangzhou "]   也可以用字典的性质 直接取里面的数据
30000.0
apts[ [ "Hangzhou", "Beijing", "Shenzhen" ] ]  双层中括号,取出多个对应值

...

apts = pd.Series(cities, name="price")
apts                              name是指定的,也可以不写

 

  

使用list定义一个列表,作为Series的index

list("abcde")

输出 ['a', 'b', 'c', 'd', 'e']
s = pd.Series(np.random.randn(5), index=list("abcde"))
s
a   -1.413697
b    0.379281
c   -0.355339
d   -0.700710
e   -0.148403
dtype: float64
注意:个数一定要对应上
list[1:4]       是根据apts输出的结果下标去取,与在{ }内部的顺序无关     都是左闭右开

apts[[4,3,2]]   双层括号,根据数字顺序取
Shenzhen    50000.0
Shanghai    60000.0
Hangzhou    20000.0
Name: price, dtype: float64
apts[3: ]   从第三个到尾 

apts[ :-2]  从头到倒数第二个

 
a = [1,2,3,4,5]
b = [2,3,4,5,6]
a+b

  

两个list可以直接拼接在一起

 

"Shanghai" in apts 是否在里面   输出 True或者 False

 

 apts.get("Beijing")  

如果在里面,返回,不在里面,返回None

 print(apts.get("Chongqing", 0))  

不在里面,返回默认值0

less_than_50000 = apts < 50000
less_than_50000

返回的是True或者False

但是取出具体的数据方法是

apts[ less_than_50000 ]

 

基本的数学运算:即对Series中的每一个元素都赋值

     

     apts ** 2   两个乘号表几次方 后面数字表示几次

    两次时 等价于  np.square(apts)

 

cars = pd.Series({"Beijing": 300000, "Shanghai": 350000, "Shenzhen": 300000,
"Tianjian": 200000, "Guangzhou": 250000, "Chongqing": 150000})
cars.astype(str)   是object类型的
# cars      int64类型
# cars.astype(np.float)    float64类型     也可以在

 

cars = pd.Series({......},dtype=float64)
cars   这样改

# 以上写法等于
# cars = pd.Series({"Beijing": 300000, "Shanghai": 350000, "Shenzhen": 300000,
# "Tianjian": 200000, "Guangzhou": 250000, "Chongqing": 150000}, dtype=np.str)
# cars

  

apts.isnull()

Suzhou的是True,

apts[apts.isnull()] = apts.mean()    # 将apts的平均值赋值给那个为NaN的
apts

 

dataframe  数据结构

  就是一张表格

 dataframe可以由一个dictionary构造得到。 也就是两者结合

data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'], 'year': [2016, 2017, 2016, 2017, 2016, 2016], 'population': [2100, 2300, 1000, 700, 500, 500]}
pd.DataFrame(data)

  

     

     :    之前的代表列 的名字,之后是中括号括起来, 每一行对应相等;否则出现  “ValueError: arrays must all be same length” 错误 

 

当把“population”加个  “  s ”时:

多加一列,没错误:

index的下标多加一个“seven”,出现   ValueError: Shape of passed values is (4, 6), indices imply (4, 7)

 

也可以从几个Series构建一个DataFrame

      

也可以用一个list of dicts来构建DataFrame

中括号在外面,index始终是在DataFrame()里面的

 也可以:

总之,要多练练。

这个就是错误的:

 

DataFrame中已有一个df:

       

 

        

DataFrame元素赋值

在特定的位置元素赋值:                                                                         可以给一整列赋值:

         

取出行列:图示,先行 后列

不存在:frame.rows 而是frame.index, frame.columns                                        可以自己设置使其好看一点

             

 

 

 

 

Index

  默认的index

   

  可以自己指定

  

  e是多出来的下标,但是可以直接填充

  

  范围是0-5,再用其他颜色填充NAN的位置

  

  reindex 可以指定行和列 进行排序

 

  drop来删除Series和DataFrame中的index,注意drop的效果不是in place的,

  也就是说它会返回一个object,原来的Obejct并没有被改变

                   axis=1时删除列 axis=0时删除行

  

 

  hierarchical index

   

  

  data.index

  unstack和stack可以帮助我们在hierarchical indexing和DataFrame之间进行切换。

  data.unstack().stack()

 

文件读写

 

# 读进去文件,只能放在同一个文件件下面,该下面的文件夹 data, 放在其他的位置不行
goog = pd.read_csv("data/GOOG.csv")
goog.head()


df.to_csv("data/sample.tsv", sep="\t") #写进去,不仅对csv,同时对tsv文件也可以


pd.read_csv("data/sample.tsv", sep="\t", index_col=0)  # 然后再读进来

  

各种绘图技能

%matplotlib inline 

# 只有加了上面这一行, .plot才能画出来图
goog["Adj Close"].plot()    # Adj Close是数据里面的参数

   


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM