数据分析中的numpy ,pandas (2)

目录

文件读取

excel文件的读取

CSV文件的读取

 相对路径和绝对路径

pandas数据读取与筛选

读取 

条件筛选

数据整体情况查看

 聚合运算

求和

求均值 

数据映射

 通过map()可以根据列对数据进行映射

空值处理

fillna填充空值

查找空值

检验是否为空值

 求出每一列空值的个数

 求均值


文件读取

excel文件的读取

import pandas as pd
import numpy as mp
#后缀名不能省略
#相对路径 相对于当前编辑的路径
pd.read_excel('数据表.xlsx')
输出结果(默认为表格中的sheet1)
A公司Unnamed: 1Unnamed: 2Unnamed: 3
0NaN销量单价总利润
1A6412768
2B4515675
3C3323759
4D2245990
#指定sheet读取
#使用索引,从左至右,第一个sheet(即sheet1)的索引为0
pd.read_excel('数据表.xlsx',sheet_name=1)

 输出结果

B公司Unnamed: 1Unnamed: 2Unnamed: 3
0NaN销量单价总利润
1A2212264
2B45321440
3C77231771
4D55211155

index_col  以表格中的列表来设置行索引
header 以表格中的某行设置列索引

pd.read_excel('数据表.xlsx',index_col=0,header=0)

 输出结果

Unnamed: 1Unnamed: 2Unnamed: 3
A公司
NaN销量单价总利润
A6412768
B4515675
C3323759
D2245990
c = ['万科','阿里','百度']
s = [2,4,6]
t = [1,3,5]
data = pd.DataFrame(data={
    '公司':c,'分数':s,'日期':t
})
data

 输出结果

公司分数日期
0万科21
1阿里43
2百度65

写入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万科21
1阿里43
2百度65

 相对路径,相对于当前文件的路径

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

输出结果 

c1c2c3
r1123
r2456
r3789

 读取一列

#读取一列
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
身高年龄身高级别
015929
117829
216320
316720
415320
515227
617123
717020
816125
915222

先给它们赋为空值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(* ̄▽ ̄*)ブ

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五彩大铁猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值