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是数据里面的参数