目录

文件读取

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(* ̄▽ ̄*)ブ

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐