首页 > 其他分享 >pandas处理excel

pandas处理excel

时间:2022-08-20 16:14:51浏览次数:52  
标签:name 处理 excel df np pd print data pandas

START

 

import pandas as pd
url = "input.xls"
data = pd.read_excel(io=url,index_col="age",sheet_name=0)
"""
参数:
io 代表文件路径
index_col 代表索引列
sheet_name 为第几张工作表 默认为第一个,可以用索引,也可以用名字
"""

 

输出所有信息

print(data,type(data))
"""
id name 个性签名
age
23 1 a1 哥的地盘
24 2 a2 哥的传说
25 3 a3 心花怒放
26 4 a4 倚天屠龙
27 5 a5 逍遥剑先
<class 'pandas.core.frame.DataFrame'>
"""

按照索引,输出一行数据

 

print(data.loc["a2"])

-----------------------
id 2
age 24
个性签名 哥的传说
Name: a2, dtype: object

 

后面获取单个字段

 

print(data.loc["a2"].get("个性签名"))
-----------------------------------
哥的传说

 

获取所有的列的字段名

print(data.columns)
-------------------
Index(['id', 'age', '个性签名'], dtype='object')



print(data.columns.values)
------------------------------
['id' 'age' '个性签名']

获取一列:

print(data["age"]) #单个字段
---------------------
name
a1 23
a2 24
a3 25
a4 26
a5 27




print(data[["age","id","个性签名"]]) #也支持多个字段 以数组传参
-----------------------------
age id 个性签名
name
a1 23 1 哥的地盘
a2 24 2 哥的传说
a3 25 3 心花怒放
a4 26 4 倚天屠龙
a5 27 5 逍遥剑先

如何遍历呢?

 

for idx,row in data.iterrows():  #idx=索引的值,row=一行数据
print(f"{idx}的数据为:")
for key in data.columns.values:
s = f"{key}:{row.get(key)}"
print(s)
print("----------")
---------------------------------------------------------------
a4的数据为:
id:4
age:26
个性签名:倚天屠龙
----------
a5的数据为:
id:5
age:27
个性签名:逍遥剑先
----------

 

做数据的条件判断。

 

print(data.loc[data["id"] > 3,["个性签名","id"]])
print(data["id"] == 2)
------------------------------------------------------------
个性签名 id
name
a4 倚天屠龙 4
a5 逍遥剑先 5

 

将数据保存为excel

 

data_frame1 = data.loc[data["id"] > 3,["个性签名","id"]]
data_frame1.to_excel("output.xlsx")

 

剩下的我该去补一补基础喽,numpy 和 pandas

-----------------------------numpy---------------------------------------

pip install numpy

如何创建对象

 

#第一种创建方式
arr = np.array([11,22,33])
print(arr,type(arr))
-------------
[11 22 33] <class 'numpy.ndarray'>


#第二种创建方式: 通过读取文件

#第三种创建方式
arr = np.ones(shape=(3,3)) # 全部为1
arr = np.zeros(shape=(3,3)) #全部为0
arr = np.arange(1,26).reshape(5,5) #range效果一样
arr = np.random.randint(0,100,size=(3,5))#取值伪随机数,需要指定size
arr = np.linspace(0,10,num=5) #从a到b分为n份

 

属性:

 

print(arr.shape) #形状
print(arr.ndim)# 几维
print(arr.size)#一共有多少个数据
print(arr.dtype)#数据类型

 

方法:

 

arr.reshape(1,25)

 

索引和切片

#print(arr[0][3]) = print(arr[0,3]) #索引取值

print(arr[1:,:2]) #切片

print(arr[1:][:3]) #代表先切出来一个结果 再继续切!!!!!!!!!!!!!!!注意

#注意 一定要在一个括号里面切

将数组转化为一维数组:这里说一下,不止是用于pandas也适用于numpy

 

arr.flatten()

 

聚合函数:

 

arr1.sum(axis=1)

 

级联:

data = np.concatenate((arr0,arr1),axis=1)
------------------------------------------
[[0. 0. 1. 1.]
[0. 0. 1. 1.]]

np.hstack((arr0,arr1)) #== (axis = 1)
np.vstack((arr0,arr1)) #== (axis = 0)

-----------------------------------------pandas---------------------

分为两种数据类型

"""series : 为一维数据dataframe: 二维数据"""

创建series数据方式

 

s = pd.Series(data=[1,2,"abc"],index=["a","b","c"]) #基本创建
dic = {
"name":"wusen"
}
s = pd.Series(data=dic)#通过字典创建

print(s,type(s))
----------------------------------------------------
a 1
b 2
c abc
dtype: object <class 'pandas.core.series.Series'>

 

索引切片:

 

pass:跟别的一样,不试了,不重要

 

属性:

 

print(s.shape) #太懒了,不写了
print(s.size)
print(s.index)
print(s.values)
print(s.dtype)

 

方法:

 

print(s.head(1)) #前一个数据
print(s.tail(1)) #后一个数据
print(s.unique()) #去重
print(s.isnull) #这个方法没搞明白是啥

#series运算的时候索引必须一样

 

二维数组dataframe

创建:

 

df = pd.DataFrame(data=np.arange(1,10).reshape(3,3),index=["a","b","c"],columns=["A","B","C"])
print(df,type(df))
-------------------------------------------
A B C
a 1 2 3
b 4 5 6
c 7 8 9 <class 'pandas.core.frame.DataFrame'>

#默认索引和列 都是0123456 只有手动指定以后才会变

 

属性:

 

print(df.index)
print(df.columns)
print(df.values)
print(df.shape)

 

索引切片

 

# print(df["A"]) #取一列
# print(df[["A","B"]]) #取多列
# print(df[["A","B"]]["A"]) #在多列基础上继续取列
# print(df.iloc[0]) #隐士取一行
# print(df.iloc[0:]) #隐士取多行
# print(df.loc["a"]) #显式取一行
# print(df.loc[["a","b"]]) #显式取多行

# print(df.iloc[1,1]) #隐式取值
# print(df.iloc[[1,2],[1,2]]) #隐式取值
# print(df.iloc[:,:]) #隐式切片取值

 

其他知识点:

 

# 如何给某一列转换为时间格式
# df["time"] = pd.to_datetime(df["time"])
# 将某一列数据作为行索引,inplace=True 将新数据赋值给原来的变量
df.set_index("A",inplace=True)
print(df)

 

数据清洗:

缺失值:None 不可以参与运算

np.nan(NAN) 可以参与运算

重复值

异常值

处理缺失值:

 

# df = pd.DataFrame(data=np.arange(1,10).reshape(3,3))
# df.iloc[1,1] = None #会默认转化为NAN
# print(df)
# 方式一:对空值过滤,删除行数据
# 太麻烦了
# print(df.isnull().any(axis=1)) #any是检测 行或者列中是否有True
# print(df.isnull().any(axis=1).index)
# df = df.drop(labels=df.isnull().any(axis=1).index,axis=1)
# 方式二:
# print(df.dropna(axis=0))
# 方式三:
# print(df.fillna(value=0)) #默认指定一个数值
# print(df.fillna(method="ffill",axis=1)) #同一行,前一个数据
# print(df.fillna(method="bfill",axis=1)) #同一行,取后一个数据

 

处理重复值:

 

df = pd.DataFrame(np.arange(1,26).reshape(5,5))
df.iloc[1] = [0,0,0,0,0]
df.iloc[2] = [0,0,0,0,0]
df = df.drop_duplicates(keep="first") #keep : {'first', 'last', False}, default 'first'

 

处理异常数据:

 

# 处理异常数据
# df = pd.DataFrame(data=np.random.random(size=(1000,3)),columns=["A","B","C"])
# print(df)
# twice_std = df["C"].std()*2 # 条件
# -(df["C"] > twice_std)
# df.loc[-(df["C"] > twice_std)]
# 异常值练习
# df = pd.DataFrame(data=np.arange(9).reshape(3,3),columns=["A","B","C"])
# print(df)
# print(df["A"]>3)
# print(df.loc[df["A"]>3])

 

级联操作:

 

# df1 = pd.DataFrame(data=np.ones(shape=(2,2)),columns=["A","C"])
# df2 = pd.DataFrame(data=np.zeros(shape=(2,2)),columns=["A","B"])
# print(pd.concat((df1,df2)))# 默认为0
# print(pd.concat((df1,df2),axis=1))
# print(pd.concat((df1,df2),axis=0,join="inner"))#参数为内连接

 

合并数组:

 

# data1 = {
# "name":["a","b","c"],
# "age":[11,22,33]
# }
# df1 = pd.DataFrame(data=data1)
# data2 = {
# "name":["a","b","c"],
# "num":[1111,2222,3333]
# }
# df2 = pd.DataFrame(data=data2)
# print(pd.merge(df1,df2,on="name"))
# # 参数on = left——on + right_on
# #参数how = "inner"

 

高级操作--------------------------

按照一维数组 指定替换某个值:

 

df = pd.DataFrame(data=np.arange(1,10).reshape(3,3),index=["a","b","e"],columns=["A","B","C"])
print(df.replace(to_replace=5,value="HHHH"))#变成一维数组,第一个数字改变
print(df.replace(to_replace=[1,3],value="HHHH"))#变成一维数组,列表里面的位置都会变
print(df.replace(to_replace={1, 3,6},value="HHHH"))#变成一维数组,列表里面的位置都会变

 

映射 map

 

dic = {
"name":["张三","李四"],
"num":[5000,8000]
}
df = pd.DataFrame(data=dic)
# 定义映射关系
mapper = {
"张三":"是个傻子",
"李四":"不是傻子"
}
df["sign_name"] = df["name"].map(mapper)
print(df)

 

映射例子一:

 

# def after_num(s):#计算税后薪资
# return s - (s-3000)*0.5
# df["after_num"] = df["num"].map(after_num)
# print(df)

 

随机抽样:

 

# df = pd.DataFrame(data=np.arange(12).reshape(4,3),columns=["A","B","C"])
# print(df)
# # np.random.permutation(3) = [2,1,0] 打乱
# # df = df.take([2,1,0],axis=1)
# df = df.take(np.random.permutation(3),axis=1).take(np.random.permutation(4),axis=0)
# print(df)

 

----数据分类处理

 

dic = {
"name":["A","A","B","C"],
"num":[10,20,33,44]
}
df = pd.DataFrame(data=dic)
自定义高级聚合函数:.transform(fun1)    ==   apply(fun1)
def fun1(s):
return s+100
print(df.groupby(by="name")["num"].transform(fun1))
"""
# print(df.groupby(by="name")["num"].mean())
# mapper = df.groupby(by="name")["num"].mean().to_dict()
# df["mean_num"] = df["name"].map(mapper)
# print(df)

 

透视表 && 交叉表

 

#这个怎么说呢,就相当于group by

dic = {
"name":["A","A","B","C"],
"num":[10,20,33,44]
}
df = pd.DataFrame(data=dic)
print(df)
# pandas高级操作-透视表&交叉表
print(df.pivot_table(index="name",values=["num"],aggfunc="sum"))
"""
index:分类条件
values:计算的列
aggfunc:聚合函数
columns:再一次分类
fill_value:NaN的替换值
"""
# 交叉表:
# pd.crosstab(df.age,df.smoke)
"""
参数跟pivot_table的差不错
"""

 

工作中遇到的新问题:

 

#1.将所有的NAN换成空字符串,用replace
df = df.replace([np.NAN,-np.NAN],"")
print(df)
2.新加一行数据:
dic = {
"name":["A","B","C"],
"age":[1,2,3]
}
df = pd.DataFrame(dic)
new = pd.DataFrame({"name":"hhhh"},index=["0"])
df = df.append(new,ignore_index=True)#如果加上这个参数,

笔记:如果其他值不写的话,那么它默认为NAN
3.给选中的元素赋值用at  (用loc好像不可以赋值)
df.at[index,colunm] = new_value
4.筛选条件  &并且   |或者     ~取反
df_new = df[(df["Line"] == line) & (df["Shift"] == shift)]

 

标签:name,处理,excel,df,np,pd,print,data,pandas
From: https://www.cnblogs.com/wusen0601/p/16607916.html

相关文章

  • c# 下载文件并处理进度
    我们先来个FormusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.IO;usingSy......
  • 高性能服务器之事件处理模式
    I/O模型对于一个套接字上的输入操作,通常存在以下两个步骤:等待分组到达,被复制到内核缓冲区中将数据从内核缓冲区复制到应用进程的缓冲区中对于上述过程,在Unix下有5......
  • 新一代分布式实时流处理引擎Flink入门实战之先导理论篇-上
    @目录概述定义为什么使用Flink应用行业和场景应用行业应用场景实时数仓演变FlinkVSSpark架构系统架构术语无界和有界数据流式分析基础分层API运行模式作业提交流程顶层抽......
  • PHP爬虫(2)DOM处理
    https://www.cnblogs.com/jbexploit/p/4592527.html摘要:在PHP爬虫(1)中详细了介绍了CURL抓取HTML数据的技术。采集数据处理也是爬虫技术中非常重要的部分。处理HTML数据可......
  • pandas 的 apply() 函数
     一、apply()函数 DataFrame.apply(func,axis=0,broadcast=False,raw=False,reduce=None, args=(),**kwds)参数解释:(1)func:就是函数,不管是自定义的函数,还是匿名......
  • SpringWebflux框架里导出excel文档
    本demo里使用springboot2.7.0版本。@GetMapping("/download/excel/file")publicMono<Void>downloadExcelFile(ServerHttpResponseresponse,WebSessionwebSessi......
  • 一些pandas问题
    1、WARNING***filesize(48130)not512+multipleofsectorsize(512)解决办法:importpandasaspdimportxlrdwb=xlrd.open_workbook('file.xls',logfile=......
  • redis分布式锁解决业务处理时间超过锁失效时间的问题
    回顾redis分布式锁获取锁成功后为了防止客户端进程失败无法正常释放锁进而导致其他的客户端再也获得不到锁,在使用SETNX的时候我们还需要为每个锁加一个过期时间ExpireTim......
  • 使用阿里读取 excel文件遇到的问题
    Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessingfailed;nestedexceptioniscom.alibaba.excel.exc......
  • 异常处理 try catch
    #include<iostream>usingnamespacestd;voidfunc(inta){if(a==0){throwstring("aiserror");throwa;}}intmain(){try......