安装 pip3 install pandas

        pip3 install openpyxl   

 

创建数据表和文件

 

from PyQt5.QtWidgets import QApplication,QWidget
import sys
import pandas as pd

class win(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(500,500)
        self.setWindowTitle(\'Excel学习\')

        #df=pd.DataFrame()  #创建数据表--空数据表
        df = pd.DataFrame({\'姓名\':[\'张三\',\'李四\',\'王五\'],\'物理\':[56,98,45]})  # 创建数据表
        df.to_excel(\'D:/ss/ss.xlsx\')  #把数据表保存为xlsx文件

if __name__==\'__main__\':
    app=QApplication(sys.argv)
    w=win()
    w.show()
    sys.exit(app.exec_())

此时在指定目录中生成一个xlsx文件

打开后

第一列是pandas自动产生的索引列

自定义索引列

df = pd.DataFrame({\'ID\':[1,2,3],\'姓名\':[\'张三\',\'李四\',\'王五\'],\'物理\':[56,98,45]})  
        df=df.set_index(\'ID\')  #设置索引列--这样不会单独产生索引列
        df.to_excel(\'D:/ss/ss.xlsx\')
df.set_index(\'ID\',inplace=True)  #设置索引列--这样不会单独产生索引列

 

读取文件 

df = pd.read_excel(\'D:/ss/ss.xlsx\',header=0,index_col=\'ID\')  #读取文件
        #参数header  第几行是标题栏---有的文件第一行不是标题栏--0开始--默认0
        #如果是空行能自动识别
        #如果没有标题栏 header=None
        #参数index_col   指明索引列,这样pandas不会自动产生索引列
df = pd.read_excel(\'D:/ss/ss.xlsx\',header=3,usecols=\'C:H\',dtype={\'学号\':str,\'日期\':str,\'字符串\':str})
#skiprows=3 跳过最上边的n行
#usecols=\'C:H\' 读取C到H列
#dtype={\'学号\':str} 指定某列的数据类型,不能是int--float64不能转成int
df1 = pd.read_excel(\'D:/ss/ss.xlsx\',index_col=\'ID\',sheet_name=\'Sheet1\')  #读取指定表格--默认第一张

【可以连续使用这条语句,但是后面的会覆盖掉前面的数据】

 

 

 

 

返回工作簿中的所有表格 

import openpyxl
wb = openpyxl.load_workbook(\'D:\ss\ss.xlsx\') #打开工作簿
sheets = wb.sheetnames # 获取wb中所有的表格
#返回值:列表--[\'Sheet1\', \'Sheet2\']

print(sheets)
wb.close()

 

 

返回总行数和总列数

s=df.shape     #返回总行数和总列数---(3, 3)
#不包括标题行

 

返回所有列标题

s=df.columns  #返回所有列标题
        #Index([\'ID\', \'姓名\', \'物理\'], dtype=\'object\')

 

返回头n行数据或末尾n行数据

s=df.head(4)  #返回头n行数据---观察表格结构--默认5行
s = df.tail(4)  #返回末尾n行数据

 

添加或修改标题

df.columns=[\'学号\',\'姓名\',\'数学\']  #添加或修改标题

 

创建序列 

s1=pd.Series()  #创建一个空序列
        #序列的三个属性:data(现在不用了)、index、name
d={\'x\':100,\'y\':200,\'z\':300}
s1 = pd.Series(d)  #创建一个序列---字典转化成序列
        #把字典的keys转化为index,把values转化为data
L1=[10,20,30]
L2=[\'x\',\'y\',\'z\']
s1 = pd.Series(L1,index=L2)  #把列表转化为序列

#注意:在pandas里行和列都是一个序列

 

把序列加到数据表 

import pandas as pd
s1 = pd.Series([1,2,3],index=[1,2,3],name=\'A\')  #创建序列
    #index相当于行号   name相当于列标
s2 = pd.Series([10, 20, 30], index=[1, 2, 3], name=\'B\')
s3 = pd.Series([100, 200, 300], index=[1, 2, 3], name=\'C\')
df=pd.DataFrame({s1.name:s1,s2.name:s2,s3.name:s3})  #把序列以列形式加到数据表
print(df)

df=pd.DataFrame([s1,s2,s3])  #index做为列,name做为行

 

import pandas as pd
s1 = pd.Series([1,2,3],index=[1,2,3],name=\'A\')
s2 = pd.Series([10, 20, 30], index=[1, 2, 3], name=\'B\')
s3 = pd.Series([100, 200, 300], index=[2, 3,4], name=\'C\')
df=pd.DataFrame({s1.name:s1,s2.name:s2,s3.name:s3})  
print(df)
#index不同时取并集,空位子用NaN

 

返回指定列数据的序列(Series)

s=df[\'学号\']  #返回指定列数据的序列(Series)

 

给指定单元格赋值

 

df[\'学号\'].at[0]=1  #给指定单元格赋值
df.at[1,\'学号\']=2   #给指定单元格赋值

 

计算公式  

df[\'总分\']=df[\'物理\']+df[\'数学\']  #总分列=物理列+数学列

 

import pandas as pd
def add(x):
    return x+10
df = pd.read_excel(\'D:/ss/ss.xlsx\',index_col=\'ID\')
df[\'总分\']=df[\'物理\'].apply(add)  #把df[\'物理\']中的每个元素做为add参数进行计算

 

排序 

df.sort_values(by=\'物理\',inplace=True,ascending=False)  #排序--根据数据排序
#by=\'物理\'--排序的列
#inplace=True---在原数据表排序,不生成新数据表
#ascending=False 降序;ascending=True(默认) 升序
df.sort_values(by=[\'合格\',\'物理\'],inplace=True,ascending=[False,True])  #多重排序--根据数据排序

筛选 

def saixuan(x):
s=60<=x<=100
return s
df=df.loc[df[\'物理\'].apply(saixuan)] #筛选
#参数为 True的行留下,false的行放弃

 

柱状图 

 

import pandas as pd
import matplotlib.pyplot as plt   #2D制图库
#允许显示中文
plt.rcParams[\'font.sans-serif\']=[\'SimHei\']    #指定默认字体 SimHei为黑体
plt.rcParams[\'axes.unicode_minus\']=False   #用来正常显示负号
df = pd.read_excel(\'D:/ss/ss.xlsx\',index_col=\'ID\')
df.plot.bar(x=\'姓名\',y=\'数学\',color=\'r\',width=0.2,label="数学成绩",alpha=0.8,title=\'成绩对比图\')  #柱状图
#参数1  x轴;参数2 y轴
#color 设置颜色
#width设置条形图的宽度
#alpha设置透明度
#label题注文本
#title图标题
plt.tight_layout()  #紧凑型布局---横坐标的文本全部显示
plt.show()

 

合并数据表

import pandas as pd

df1 = pd.read_excel(\'D:/ss/ss.xlsx\',index_col=\'ID\',sheet_name=\'Sheet1\')  #读取指定表格--默认第一张
df2 = pd.read_excel(\'D:/ss/ss.xlsx\',index_col=\'ID\',sheet_name=\'Sheet2\')
df3=df1.merge(df2,on=\'ID\',how=\'left\') #合并数据表
#df3=pd.merge(df1,df2,on=\'ID\')
#把df1和df2两张表的数据进行合并
#on=\'ID\'   根据这列合并  两个表这个列必须有
#有相同名称的列,会自动改名,前面的加_x,后面的加_y
#how=\'outer\'   两个表的数据都合并进来
#how=\'inner\'   只合并on=\'ID\'相同的数据----默认
#how=\'right\'    在\'inner\'的基础上右数据表全部合并进来
#how=\'left\'     在\'inner\'的基础上左数据表全部合并进来

df3=df3.fillna(0)  #把NaN用改成0
#  https://www.cnblogs.com/liming19680104/p/10468767.html

df3.物理_y=df3.物理_y.astype(int)  #数据类型转换

print(df3)

 

 

版权声明:本文为liming19680104原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liming19680104/p/11298751.html