Pandas数据分析常用方法
1、读取数据pd.read()
- 指定索引列
-
eg1:
# index:指定索引,columns:指定列名 pd.DataFrame(np.arange(12,24).reshape(3,4),index=['a','b','c'],columns=['w','x','y','z'])
-
eg2:
catering_sale = "catering_sale.xls" # 读取数据,指定"日期"列为索引列(DataFrame所有的Series共用一个列索引) data = pd.read_excel(catering_sale, index_col='日期')
-
names : 列名数组,缺省值 None,用于读取数据的指定列名
eg1:
catering_sale = "catering_sale.xls"
data = pd.read_excel(catering_sale, names=[‘date’,‘sale’])
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sMTqDTNL-1593225260019)(D:\我\MyBlog\Pandas数据分析常用方法.assets\image-20200624181257685.png)]
## 2、 按行索引iloc与loc
```python
data2=pd.DataFrame(data1,columns=('a','b','c')) #columns定义字段
data2
a b c
0 0 2 4
1 6 8 10
2 12 14 16
3 18 20 22
4 24 26 28
2.1 iloc
-
取指定单行多列
data2.iloc[2] a 12 b 14 c 16 Name: 2, dtype: int32
-
iloc[start:end],索引[开始:结束],左闭右开
data2.iloc[1:4] a b c 1 6 8 10 2 12 14 16 3 18 20 22
-
指定行,列取到一个数字
data2.iloc[2,2] #[行,列] 16
-
不能直接取字段,报取值错误
data2.iloc[2,'c'] #[行,列] #ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types
-
可以用切片来取指定行列
data2.iloc[2:3,0:] a b c 2 12 14 16
2.2 loc
-
取第指定单行行,多列,与iloc一样
data2.loc[2] a 12 b 14 c 16 Name: 2, dtype: int32
-
loc[start:end],索引[开始:结束],左闭右闭–>与iloc不同
data2.loc[1:4] a b c 1 6 8 10 2 12 14 16 3 18 20 22 4 24 26 28
-
不能像iloc一样直接取指定行,报类型错误
data2.loc[2,3] ##[行,列] 报错 #TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [2] of <class 'int'>
-
可以去特定行和列,得到指定得一个数字
data2.loc[2,'c'] 16
-
取指定data3指定行,指定列,有字段
data3=data2.loc[1:4] data4=data3[['a','b']] print(data4) print(type(data4)) #类型DataFrame a b 1 6 8 2 12 14 3 18 20 4 24 26 <class 'pandas.core.frame.DataFrame'>
-
取data3指定行单列,有字段,类型DataFrame
data5=data3[['a']] print(data5) print(type(data5)) a 1 6 2 12 3 18 4 24 <class 'pandas.core.frame.DataFrame'>
-
取data3指定行单列,没有字段,类型Series
data6=data3['a'] print(data6) print(type(data6)) 1 6 2 12 3 18 4 24 Name: a, dtype: int32 <class 'pandas.core.series.Series'>
2.3 总结
1.loc
通过行标签索引行数据
例:loc[n]表示索引的是第n行(index 是整数)
loc[‘d’]表示索引的是第’d’行(index 是字符)
有行索引可以没有字段取值,但有字段取值前必须得有行索引,
而且行索引只能为标签索引形式来取,不能按切片形式来取。
单取切片形式可以,只是索引为左闭右闭。
2.iloc
通过行索引获取行数据,不能是字符,取索引必须按切片形式来取,不能按标签,这是与loc的不同。索引为左闭右开。iloc也可以取指定行列,只不过得按切片形式索引,不能直接拿标签索引来做。
3.建议
当用行索引的时候, 尽量用 iloc 来进行索引; 而用标签索引的时候用 loc 。
3、 Matplotlib绘图
1. plot折线图
plt.plot(x,y,S)
-
绘制y对于x的折线图
-
字符串参量S指定绘制时图形的类型、样式和颜色
- 常用:“b”为蓝色,“r”为红色,"o"为圆圈,”-“为实线,”–“为虚线
eg1:
import matplotlib.pyplot as plt x = np.linspace(0,2*np.pi,50) y = np.sin(x) plt.plot(x,y,"b--")
2. pie饼状图
plt.pie(size)
-
size是一个列表,记录各个扇形的面积比列,pie有丰富的参数
eg1:
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs'] # 定义标签 sizes = [15, 30, 45, 10] # 每一块的比例 colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral'] # 每一块的颜色 explode = [0, 0.1, 0, 0] # 突出显示,这里仅仅突出显示第二块 plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90) plt.axis('equal') # 显示为圆(避免比例压缩为椭圆) plt.show()
3.hist条形图
plt.hist(x,y)
-
x 是待绘制直方图的一维数组
-
y是正数,表示均匀分布为y组,也可以是列表,列表各个数字为分组的边界点(即手动指定分界点)。
eg1:
x = np.random.randn(1000) # 1000个服从正态分布的随机数 plt.hist(x,10) plt.show()
4.boxplot箱线图
D.boxplot()
D.plot(kind='box')
-
一种方法是直接调用DataFrame的boxplot()方法;
-
另一种是调用Series或者DataFrame的plot()方法,并用kind参数指定箱型图(box);
eg1:
x = np.random.randn(1000) # 1000个服从正态分布的随机数 D = pd.DataFrame([x,x+1]).T # 构造两列的DataFrame D.plot(kind='box') # 调用Series内置的绘图方法,用kind参数指定箱型图(box) plt.show()
一种方法是直接调用DataFrame的boxplot()方法;
-
另一种是调用Series或者DataFrame的plot()方法,并用kind参数指定箱型图(box);
eg1:
x = np.random.randn(1000) # 1000个服从正态分布的随机数 D = pd.DataFrame([x,x+1]).T # 构造两列的DataFrame D.plot(kind='box') # 调用Series内置的绘图方法,用kind参数指定箱型图(box) plt.show()