目录
文件读取
excel文件的读取
import pandas as pd
import numpy as mp
#后缀名不能省略
#相对路径 相对于当前编辑的路径
pd.read_excel('数据表.xlsx')
输出结果(默认为表格中的sheet1)
A公司 | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | |
---|---|---|---|---|
0 | NaN | 销量 | 单价 | 总利润 |
1 | A | 64 | 12 | 768 |
2 | B | 45 | 15 | 675 |
3 | C | 33 | 23 | 759 |
4 | D | 22 | 45 | 990 |
#指定sheet读取
#使用索引,从左至右,第一个sheet(即sheet1)的索引为0
pd.read_excel('数据表.xlsx',sheet_name=1)
输出结果
B公司 | Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | |
---|---|---|---|---|
0 | NaN | 销量 | 单价 | 总利润 |
1 | A | 22 | 12 | 264 |
2 | B | 45 | 32 | 1440 |
3 | C | 77 | 23 | 1771 |
4 | D | 55 | 21 | 1155 |
index_col 以表格中的列表来设置行索引
header 以表格中的某行设置列索引
pd.read_excel('数据表.xlsx',index_col=0,header=0)
输出结果
Unnamed: 1 | Unnamed: 2 | Unnamed: 3 | |
---|---|---|---|
A公司 | |||
NaN | 销量 | 单价 | 总利润 |
A | 64 | 12 | 768 |
B | 45 | 15 | 675 |
C | 33 | 23 | 759 |
D | 22 | 45 | 990 |
c = ['万科','阿里','百度']
s = [2,4,6]
t = [1,3,5]
data = pd.DataFrame(data={
'公司':c,'分数':s,'日期':t
})
data
输出结果
公司 | 分数 | 日期 | |
---|---|---|---|
0 | 万科 | 2 | 1 |
1 | 阿里 | 4 | 3 |
2 | 百度 | 6 | 5 |
写入Excel文件
data.to_excel('mdata.xlsx')
CSV文件的读取
pd.read_csv('CSV文件.csv)
默认为逗号分隔 ,如果不是,用sep:设置文本文件的分隔符号
pd.read_csv('CSV文件.csv,sep=',',index_col=0)
csv文件的写入
data.to_csv('mdata2.csv')
相对路径和绝对路径
绝对路径
path=r'C:\Users\1\Desktop\Mdata.xlsx'
pd.read_excel(path,index_col=0)
输出结果
公司 | 分数 | 日期 | |
---|---|---|---|
0 | 万科 | 2 | 1 |
1 | 阿里 | 4 | 3 |
2 | 百度 | 6 | 5 |
相对路径,相对于当前文件的路径
path=r'C:\Users\1\mdata.xlsx'
pd.read_excel(path,index_col = 0)
或者使用
path='C:/Users/1/mdata.xlsx'
pd.read_excel(path,index_col = 0)
两个想要达到的目的是一样的,学会了就好。
pandas数据读取与筛选
读取
df = pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9]],index=['r1','r2','r3'],columns=['c1','c2','c3'])
df
输出结果
c1 | c2 | c3 | |
---|---|---|---|
r1 | 1 | 2 | 3 |
r2 | 4 | 5 | 6 |
r3 | 7 | 8 | 9 |
读取一列
#读取一列
df['c3']
读取多列,使用列表读取多列
#读取多列,使用列表读取多列
df[['c1','c3']]
读取行
df.loc['r2']
读取多行
df.loc[['r2','r3']]
head函数查看前n行
df.head(2)
条件筛选
最初的表格如下,现在让我们来筛选c1列大于1。
方法1:
df[df['c1']>1]
方法2:用loc也能达到我们的目的
df.loc[df['c1']>1]
数据整体情况查看
df.shape
查看数据统计指标
#查看数据统计指标
df.describe()
我们可以看到
- count,数据个数(非空数据)
- mean,均值
- std,标准差
- min,最小值
- 25%,第1四分位数,即第25百分位数
- 50%,第2四分位数,即第50百分位数
- 75%,第3四分位数,即第75百分位数
- max,最大值
查看表格数据的信息
df.info()
先将原本表格中的c1列数据进行数据替换
然后查看某一组数据中每个数据出现的次数
df['c1'] = [1,2,1]
#查看某一组数据中每个数据出现的次数
df['c1'].value_counts()
结果如下图所示,可以知道,c1列1出现次数2次,2出现次数1次。
增sum列 (sum=各行总和)
df['sum'] = df['c1']+df['c2']+df['c3']
df
结果如下图所示,列表中又出现sum这一列。
聚合运算
根据上一个列表所示,我们现在分别对它进行求和,
求和
df.sum()
求均值
df.mean()
axis = 0 求列方向的聚合值
axis = 1 求行方向的聚合值
df.mean(axis=1)
数据映射
通过map()可以根据列对数据进行映射
records = pd.DataFrame(data={
'身高':mp.random.randint(130,190,10),
'年龄':mp.random.randint(20,30,10)
}
)
records
- map函数的原理:就是把map操作的对象(通常是一个序列)里面每一个数据迭代出来
- 传递给map接收的参数(通常是一个函数)
- 此处map接收的是一个map_function函数,这个函数可以接收一个参数x
- 直到map把前面的records['身高']这个序列迭代完成为止
def map_function(x):
print(x)
records['身高'].map(map_function)
等同于这样一个过程
for x in records['身高']:
map_function(x)
定义一个转换身高为高或低的函数
def map_high(x):
if x>=175:
return'高'
else:
return'低'
map_high(180)
将定义的身高添加到records中
records['身高级别']=records['身高'].map(map_high)
records
如图所示,可以看到多了一列我们新定义的身高级别
空值处理
records
身高 | 年龄 | 身高级别 | |
---|---|---|---|
0 | 159 | 29 | 低 |
1 | 178 | 29 | 高 |
2 | 163 | 20 | 低 |
3 | 167 | 20 | 低 |
4 | 153 | 20 | 低 |
5 | 152 | 27 | 低 |
6 | 171 | 23 | 低 |
7 | 170 | 20 | 低 |
8 | 161 | 25 | 低 |
9 | 152 | 22 | 低 |
先给它们赋为空值NAN
records.loc[2,'身高'] = None
records.loc[5,'年龄'] = None
records
如下图所示,我们可以看到2行身高列和5行年龄列 都重新赋为空值。
fillna填充空值
records.fillna(value=0,inplace=True)
records
如下图所示,我们可以看到2行身高列和5行年龄列 都填充为0.0。
查找空值
检验是否为空值
records.isnull()
如下图所示,我们可以看到因为我们上一个操作已经将空值进行填充了,所以表格中都显示为Flase。
求出每一列空值的个数
records.isnull().sum()
如下图所示,我们可以看到因为我们上一个操作已经将空值进行填充了,所以空值个数为0。
求均值
records.isnull().mean()
如下图所示
友友们既然都看到这里了觉得有用的话,点个赞哦o(* ̄▽ ̄*)ブ