python--excel

向文件中写入

  • 效果
    在这里插入图片描述
  • 代码
    import pandas as pd
    #需要向文件中写入的数据
    df=pd.DataFrame({"ID":[1,2,3],"Name":['time','writer','top']})
    #设置文档的索引
    df=df.set_index("ID")
    #创建文件,同时将数据写入到文件中
    df.to_excel("C:/Users/lenovo/Desktop/001.xlsx")
    print(df)
    print("Done!")
    

从文件中读取

  • 效果
    在这里插入图片描述
  • 代码
    import pandas as pd
    # 读取文件,,第二个参数 header=0,默认,从第 0 行开始读还可以设为None
    # 参数还可以是 index_col="ID"
    people=pd.read_excel("C:/Users/lenovo/Desktop/001.xlsx")
    # 打印表的行数,列数
    print(people.shape)
    # 打印列名
    print(people.columns)
    # 打印想要显示前几行数据
    print(people.head(2))
    print("================")
    # 打印想要显示倒数几行数据
    print(people.tail(2))
    

两种形式存数据

字典形式

在这里插入图片描述

列表形式

在这里插入图片描述

代码
import pandas as pd

# 字典类型
d = {"x": 100, "y": 200, "z": 300}
# 转换类型
s1 = pd.Series(d)
print(s1)

# 第二种方法
L1 = [100, 200, 300]
L2 = ["y", "x", "z"]
s1 = pd.Series(L1, index=L2)
print(s1)

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=[1, 2, 3], name="C")
# 数据,下面这两种加入数据的操作就是:
# 以字典形式加入:就是列数据,name是列名,索引是行名
# 以列表形式加入:就是行数据,name是行名,索引是列名
# data_file=pd.DataFrame({s1.name:s1,s2.name:s2,s3.name:s3})
data_file = pd.DataFrame([s1, s2, s3])

# 存储数据
data_file.to_excel("C:/Users/lenovo/Desktop/001/003_2.xlsx")
print(data_file)

数据填充

  • 效果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 代码

    import pandas as pd
    from datetime import date, timedelta
    
    
    # 加月的函数
    def add_month(d, md):
        yd = md // 12
        m = d.month + md % 12
        if m != 12:
            yd += m // 12
            m = m % 12
        return date(d.year + yd, m, d.day)
    
    
    books = pd.read_excel("C:/Users/lenovo/Desktop/001/004.xlsx",
                          skiprows=3,
                          usecols="C:F",
                          index_col=None,
                          dtype={"ID": str, "Instore": str, "Date": str})
    start = date(2018, 1, 1)
    for i in books.index:
        books["ID"].at[i] = i + 1
        books["Instore"].at[i] = "Yes" if i % 2 == 0 else "No"
        # books["Date"].at[i]=date(start.year+i,start.month,start.day)
        books["Date"].at[i] = add_month(start, i)
    
    print(books)
    books.to_excel("C:/Users/lenovo/Desktop/001/004.xlsx")
    

柱状图

  • 效果
    在这里插入图片描述
    在这里插入图片描述

  • 原始数据
    在这里插入图片描述

  • 代码

import pandas as pd
import matplotlib.pyplot as plt
# 读入文件
students=pd.read_excel("C:/Users/lenovo/Desktop/001/Students.xlsx")
# 文件排序,inplace=True开始排序,默认从小到大,ascending=False则从大到小排序
students.sort_values(by="Number",inplace=True,ascending=False)
print(students)
# 设置柱状图的x,y每个格标注名称,以原数据进行标记图的名称,
students.plot.bar(x="Field",y="Number",color='r')
# 柱的颜色, 蓝色
plt.bar(students.Field,students.Number,color="#0000ff")
# x轴旋转90°
plt.xticks(students.Field,rotation='90')
# 设置柱状图的x,y轴端名称,图的名称
plt.xlabel("区域")
plt.ylabel("数量")
plt.title("myFirstView",fontsize=20)
plt.tight_layout()
# plt.box()
plt.show()

柱状图,多组数据对比

  • 效果
    在这里插入图片描述
  • 原数据
    在这里插入图片描述
  • 代码
import pandas as pd
import matplotlib.pyplot as plt
# 读入文件
students=pd.read_excel("C:/Users/lenovo/Desktop/001/Students1.xlsx")
# 对数据排序
students.sort_values(by='2017',inplace=True,ascending=False)
students.plot.bar(x="Field",y=['2016','2017'],color=['r','k'])
plt.title("title",fontsize=16,fontweight='bold')
plt.xlabel("Field",fontweight='bold')
plt.ylabel("Number",fontweight='bold')
# x轴名字旋转
ax=plt.gca()
ax.set_xticklabels(students['Field'],rotation=45,ha='right')
# 调整图形位置
f=plt.gcf()
f.subplots_adjust(left=0.2,bottom=0.5)  # 距左边 0.2,距底部 0.5
# 把表的数据全部显示出来
# plt.tight_layout()
plt.show()

叠加水平柱状图

  • 效果
    在这里插入图片描述
  • 原数据
    在这里插入图片描述
  • 代码
"""和表,数据合在一起显示"""
import pandas as pd
import matplotlib.pyplot as plt
# 读入文件
users=pd.read_excel("C:/Users/lenovo/Desktop/001/Users.xlsx")
# 为了排列加一列数据
users["Total"]=users['Oct']+users['Nov']+users['Dec']
users.sort_values(by='Total',inplace=True,ascending=False)
# 水平排列
users.plot.barh(x='Name',y=['Oct','Nov','Dec'],stacked=True)
# plt.tight_layout()
plt.show()

饼状图

  • 效果
    在这里插入图片描述

  • 原数据
    在这里插入图片描述

  • 代码

""""画饼图"""
import pandas as pd
import matplotlib.pyplot as plt
# 读入数据
students=pd.read_excel("C:/Users/lenovo/Desktop/001/Students2.xlsx",index_col="From")
# 顺时针排列,起始位置
students['2017'].plot.pie(fontsize=8,counterclock=False,startangle=-270)

plt.show()

折线趋势图

  • 效果
    在这里插入图片描述

  • 原数据
    在这里插入图片描述

  • 代码

"""折线图"""
import pandas as pd
import matplotlib.pyplot as plt
weeks=pd.read_excel("C:\\Users\\lenovo\\Desktop\\001\\Orders.xlsx",index_col="Week")
# 绘制

weeks.plot(y=['Accessories','Bikes','Clothing','Components'])
# weeks.plot.area(y=['Accessories','Bikes','Clothing','Components'])
plt.xticks(weeks.index,fontsize=8)
plt.show()

散点图、直方图、密度图

  • 效果
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 原数据
    在这里插入图片描述
  • 代码
import pandas as pd
import matplotlib.pyplot as plt
# 导入数据
homes=pd.read_excel("C:\\Users\\lenovo\\Desktop\\001\\home_data.xlsx")
# 显示所有列
pd.options.display.max_columns=777
# print(homes.head())
# 绘制散点图
# homes.plot.scatter(x="sqft_living",y='price')
# 绘制直方图
homes["sqft_living"].plot.hist(bins=100)
# 修饰直方图
plt.xticks(range(0,max(homes.sqft_living),500),fontsize=8,rotation=90)
# 绘制密度图
# homes['sqft_living'].plot.kde()
# plt.xticks(range(0,max(homes.sqft_living),500),fontsize=8,rotation=90)

plt.show()

多表合并

  • 效果
    在这里插入图片描述
  • 原数据
    在这里插入图片描述
    在这里插入图片描述
  • 代码
# 学生成绩数据分析
import pandas as pd
# 读入数据
students=pd.read_excel("C:\\Users\\lenovo\\Desktop\\001\\Student_Score.xlsx",sheet_name="Students")
scores=pd.read_excel("C:\\Users\\lenovo\\Desktop\\001\\Student_Score.xlsx",sheet_name="Scores")

# 合并表格
table=students.merge(scores,how="left",on="ID").fillna(0)
table["Score"]=table["Score"].astype(int)
print(table)

数据校验、筛选错误数据

  • 效果
    在这里插入图片描述
  • 原数据
    在这里插入图片描述
  • 代码
# 筛选错误数据
import pandas as pd
students=pd.read_excel("C:\\Users\\lenovo\\Desktop\\001\\Students3.xlsx")
# 校验分数
def score_validation(row):
    """第一种方式,抛异常"""
    # try:
    #     assert 0<=row.Score<=100
    # except:
    #     print(f"#{row.ID} student{row.Name}has an invalid score{row.Score}.")

    """"第二种方法,if语句"""
    if not 0<=row.Score<=100:
        print(f"#{row.ID}\t student{row.Name}has an invalid score{row.Score}.")

students.apply(score_validation,axis=1)

18拆分一列数据

  • 效果
    在这里插入图片描述
  • 原数据
    在这里插入图片描述
  • 代码
import pandas as pd
# 拆分列 split(根据什么分割,expand=True(分割成列),保留几个数据)
employees=pd.read_excel("C:\\Users\\lenovo\\Desktop\\001\\Employees.xlsx",index_col="ID")
df=employees["Full Name"].str.split(' ',expand=True,n=1)
employees["First Name"]=df[0].str.upper()
# employees["Last Name"]=df[1]
print(employees)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值