Python自动化办公--Pandas玩转Excel【一】

相关文章:

Python自动化办公--Pandas玩转Excel数据分析【二】

Python自动化办公--Pandas玩转Excel数据分析【三】_汀、的博客-CSDN博客


python处理Excel实现自动化办公教学(含实战)【一】

python处理Excel实现自动化办公教学(含实战)【二】

python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】


python入门之后须掌握的知识点(模块化编程、时间模块)【一】

python入门之后须掌握的知识点(excel文件处理+邮件发送+实战:批量化发工资条)【二】


pandas玩转excel码源.zip-数据挖掘文档类资源-CSDN下载 码源

1.基础温故【Pandas】

1.1 创建文件

import pandas as pd

df = pd.DataFrame()
df.to_excel('001.xlsx') #可以指定路径
#df.to_excel('H:\\Anaconda\\001.xlsx')

df = pd.DataFrame({'id':[1,2,3],'name':['a','b','c']})
df.to_excel('001-data.xlsx')

df = pd.DataFrame({'id':[1,2,3],'name':['a','b','c']})
df = df.set_index('id')
df.to_excel('001-data-index.xlsx')

​      

 第一幅图索引默认在A列,通过set_index把ID设置为索引。

1.2 读取excel中的数据

 脏数据处理:第一行错误数据,或者没有数据

import pandas as pd

people = pd.read_excel('people001.xlsx')
print(people.shape)
print(people.columns)
# 默认打印3行
print(people.head())
print(people.head(3))
# 默认打印5行
print(people.tail())

#脏数据处理:第一行错误数据,或者没有数据
#存在空行会自动识别并跳过,获取列名
people = pd.read_excel('people002.xlsx',header=1)
print(people.columns)

#脏数据处理:第一行没有列名,添加列名
people = pd.read_excel('people003.xlsx',header=None)
people.columns = ['ID', 'Type', 'Title', 'FirstName', 'MiddleName', 'LastName']
people = people.set_index('ID',inplace=True)
people.to_excel('output.xlsx')

 其中在colums中是把列名和索引区别的,

people = people.set_index('ID',inplace=True)
#设置完index后,
print(people.columns)
#显示
'Type', 'Title', 'FirstName', 'MiddleName', 'LastName'

再次读取时:id还是会当作列

 这时候在读取的时候需要设置index,即可。

import pandas as pd

people = pd.read_excel('people001.xlsx',index_col="ID")

1.3 生成列、行、单元格(Series)

Series和python中的字典类似,下面是几种创建方法:

import pandas as pd

d = {
    'x':100,
    'y':200,
    'z':300,
}
print(d.values())
print(d.keys())

s1 = pd.Series(d)
print(s1.index)

L1 = [100,200,300]
L2 = ['x','y','z']
s2 = pd.Series(L1,index=L2)
print(s2.index)

s3 = pd.Series([100,200,300],index=['x','y','z'])
print(s3.index)

创建一个简单的列表:行列不同形式添加。

 index是默认对齐的方式,如果不相同会用NaN填充。

 1.4 自动填充功能【数据区域读取填充数字】

1.4.1 数值填充

 原始数据:只有name(书名)进行填充数据

数据区域不是定格,无法自动识别

import pandas as pd

books = pd.read_excel('books.xlsx',skiprows=4,usecols='C:F',index_col=None)
#usecols='C,D,E,F',填充完再设置index_col
print(books)
#NaN填充的dtype是float64

import pandas as pd

books = pd.read_excel('books.xlsx',skiprows=4,usecols='C:F',index_col=None)

for i in books.index:
    books["ID"].at[i]=i+1
print(books)

 为了显示为整型,先把类型设置为str

import pandas as pd

books = pd.read_excel('books.xlsx',skiprows=4,usecols='C:F',index_col=None,dtype={"ID":str,"InStore":str,"Date":str})

for i in books.index:
    books["ID"].at[i]=i+1
print(books)

import pandas as pd

books = pd.read_excel('books.xlsx',skiprows=4,usecols='C:F',index_col=None,dtype={"ID":str,"InStore":str,"Date":str})

for i in books.index:
    books["ID"].at[i]=i+1
    books["InStroe"].at[i]="yes" if i%2==0 else "no"
print(books)

import pandas as pd
from datetime import date, timedelta

books = pd.read_excel('books.xlsx',skiprows=4,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["InStroe"].at[i]="yes" if i%2==0 else "no"
    books["Date"].at[i]=start+timedelta(days=i)  #没有年月 month year; 时分秒有
    #books["Date"].at[i]=date(start.year+i,start.month,start.day)
print(books)

 月份相加需要计算一下,定义个子函数

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('books.xlsx',skiprows=4,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["InStroe"].at[i]="yes" if i%2==0 else "no"
    books["Date"].at[i]=start+timedelta(days=i)  #没有年月 month year; 时分秒有
    #books["Date"].at[i]=date(start.year+i,start.month,start.day)
    #books["Date"].at[i]=add_month(start,i)
#print(books)


books.set_index("ID",inplace=True)
books.to_excel("output/xlsx")





 还有一种写法不改series直接改单元格写法如下:

for i in books.index:
    booksat[i,"ID"]]=i+1
    books.at[i,"InStroe"]="yes" if i%2==0 else "no"
    books.at[i,"Date"]=start+timedelta(days=i)  #没有年月 month year; 时分秒有
    #books["Date"].at[i]=date(start.year+i,start.month,start.day)
    #books["Date"].at[i]=add_month(start,i)
#print(books)

 1.4.2 计算填充(列操作)

 列相乘,操作符重载【不用循环计算更方便】

 循环:【不从头到尾计算,部分区域计算采用单元格计算】

 

 价格加2  使用apply

 lambda:

1.5 排序,多重排序

 ascending默认从小到大排序:【true 从大到小   false从小到大】

 1.6 数据筛选、过滤

 找出年龄【18,30】分数【60,90】之间的

import pandas as pd


def validate_age(a):
    return 18 <= a <= 30  #pandas特有写法


def level_b(s):
    return 60 <= s < 90

students = pd.read_excel('Students.xlsx', index_col='ID')#id作为index
students = students.loc[students['Age'].apply(validate_age)].loc[students.Score.apply(level_b)]  # 两
种语法
students = students.loc[students.Age.apply(validate_age)].loc[students.Score.apply(level_b)]  # 两
种语法


print(students)

loc与iloc功能介绍:数据切片。通过索引来提取数据集中相应的行数据or列数据(可以是多行or多列)总结不同: 
1. loc函数通过调用index名称的具体值来取数据
2. iloc函数通过行序号来取数据
3.取多行数据时iloc不包含末尾
4.对数据进行筛选使用loc函数,当使用loc函数时, 如果index不具有特定意义,而且重复,那么提取的数据需要进一步处理,可用.reset index()函数重置index相同: .
5.【】中无逗号时,默认取行
 

筛选出来的结果:

           Name  Age  Score
ID
4   Student_004   27     73
8   Student_008   21     61
9   Student_009   18     85
19  Student_019   19     86

换一种写法:lambda

import pandas as pd


# def validate_age(a):
#     return 18 <= a <= 30


# def level_b(s):
#     return 60 <= s < 90

students = pd.read_excel('Students.xlsx', index_col='ID')
students = students.loc[students['Age'].apply(
    lambda a:18 <= a <= 30)] .loc[students.Score.apply(lambda s:60 <= s < 90)]  # 两种语法
print(students)

2.数据可视化

2.1 柱状图

FieldNumber
Agriculture12,318
Business and Management200,312
Education19,483
Engineering216,932
Fine and Applied Arts59,736
Health Professions33,947
Humanities17,664
Mathematics and Computer Sciences141,651
Other/Unspecified Subject Areas185,107
Physical and Life Sciences75,385
Social Sciences81,304
import pandas as pd
import matplotlib.pyplot as plt

students = pd.read_excel('Students1.xlsx')
students.sort_values(by='Number', inplace=True, ascending=False)
students.index = range(0, len(students))
print(students)

plt.bar(students['Field'], students['Number'], color='orange', width=0.7)#
plt.xticks(students['Field'], rotation='90') #rotation旋转
plt.title('International Student by Field', fontsize=16)
plt.xlabel('Field')
plt.ylabel('Number')
plt.tight_layout() #j紧凑型,避免下标显示不全
plt.show()

pandas中inplace参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改
inplace = True:不创建新的对象,直接对原始对象进行修改;
inplace = False:对数据进行修改,创建并返回新的对象承载其修改结果。

默认是False,即创建新的对象进行修改,原对象不变, 和深复制和浅复制有些类似。

 或者直接用pandas自带的:

import pandas as pd
import matplotlib.pyplot as plt

students = pd.read_excel('C:/Temp/Students.xlsx')
students.sort_values('Number', inplace=True, ascending=False)
print(students)
students.plot.bar(x='Field', y='Number', color='blue', title='International Students by Field')
plt.tight_layout()
plt.show()

 2.2 分组柱图深度优化(比较图)

Field20162017
Agriculture12,31812,602
Business and Management200,312200,754
Communications and Journalism21,16021,913
Education19,48317,993
Engineering216,932230,711
Fine and Applied Arts59,73661,506
Humanities17,66417,561
Intensive English40,87730,309
Legal Studies and Law Enforcement15,07715,306
Math and Computer Science141,651167,180
Physical and Life Sciences75,38576,838
Social Sciences81,30483,046
Other Fields of Study81,31887,577
Undeclared26,67521,131
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

students = pd.read_excel('Students2.xlsx')
students.sort_values(by='2017', inplace=True, ascending=False)
print(students)
students.plot.bar('Field', ['2016', '2017'], color=['orange', 'Red'])
plt.title('International Students by Field', fontsize=16,fontweight="bold")
plt.xlabel('Field', fontweight='bold')
plt.ylabel('Number', fontweight='bold')
plt.tight_layout()
ax = plt.gca() #坐标轴移动修改
ax.set_xticklabels(students['Field'], rotation=40, ha='right') #默认中心旋转
plt.gcf().subplots_adjust(left=0.2, bottom=0.42) #画布大小调整
plt.show()

 推荐第一个

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

students = pd.read_excel('Students2.xlsx')
students.sort_values(by='2017', inplace=True, ascending=False)
students.index = range(0, len(students))
print(students)

bar_width = 0.7
x_pos = np.arange(len(students) * 2, step=2)
plt.bar(x_pos, students['2016'], color='green', width=bar_width)
plt.bar(x_pos + bar_width, students['2017'], color='blue', width=bar_width)
plt.legend()
plt.xticks(x_pos + bar_width / 2, students['Field'], rotation='90')
plt.title('International Student by Field', fontsize=16)
plt.xlabel('Field')
plt.ylabel('Number')
plt.tight_layout()
plt.show()

 2.3 叠加柱状图

 用户总量从大到小排序:

import pandas as pd
import matplotlib.pyplot as plt

users = pd.read_excel('Users.xlsx')
users['Total'] = users['Oct'] + users['Nov'] + users['Dec']
users.sort_values(by='Total', inplace=True, ascending=False)
print(users)

users.plot.bar(x='Name', y=['Oct', 'Nov', 'Dec'], stacked=True)
# users.plot.barh(x='Name', y=['Oct', 'Nov', 'Dec'], stacked=True)#水平柱状图堆积
plt.tight_layout()
plt.show()

users.sort_values(by='Total', inplace=True, ascending=Ture)

users.plot.barh(x='Name', y=['Oct', 'Nov', 'Dec'], stacked=True)#水平柱状图堆积

 2.4 饼图

 其中2016 2017是字符串,避免pandas误认为数字。

import pandas as pd
import matplotlib.pyplot as plt

students = pd.read_excel('Students3.xlsx', index_col='From')
print(students)
# counterclock顺逆时针,startangle开始点确认
students['2017'].plot.pie(fontsize=8, counterclock=False, startangle=-270)
plt.title('Source of International Students', fontsize=16, fontweight='bold')
plt.ylabel('2017', fontsize=12, fontweight='bold')
plt.show()

 2.5 折现趋势图,叠加区域图

import pandas as pd
import matplotlib.pyplot as plt

weeks = pd.read_excel('Orders.xlsx', index_col='Week')
print(weeks)
weeks.plot(y=['Accessories', 'Bikes', 'Clothing', 'Components'])
weeks.plot.area(y=['Accessories', 'Bikes', 'Clothing', 'Components'])
plt.title('Sales Trends', fontsize=16, fontweight='bold')
plt.xticks(weeks.index, fontsize=8)
plt.show()

2.6 散点图直方图密度图

import pandas as pd
import matplotlib.pyplot as plt

pd.options.display.max_columns = 999#所有列都会显示
homes = pd.read_excel('home_data.xlsx')
# print(homes.head())
print(homes.corr())#相关性
homes.plot.scatter(x='sqft_living', y='price')
plt.figure()
homes.sqft_living.plot.kde() #密度图
plt.figure()
homes.sqft_living.plot.hist(bins=100) #区间设置
plt.xticks(range(0, max(homes.sqft_living), 500), fontsize=8, rotation=90) #面积
# homes.price.plot.hist(bins=200)
# plt.xticks(range(0, max(homes.price), 100000), fontsize=8, rotation=90)  #房价
plt.show()

 密度图:

 

 相关性:corr()

                     id     price  bedrooms  bathrooms  sqft_living  \
id             1.000000 -0.016762  0.001286   0.005160    -0.012258
price         -0.016762  1.000000  0.308350   0.525138     0.702035
bedrooms       0.001286  0.308350  1.000000   0.515884     0.576671
bathrooms      0.005160  0.525138  0.515884   1.000000     0.754665
sqft_living   -0.012258  0.702035  0.576671   0.754665     1.000000
sqft_basement -0.005151  0.323816  0.303093   0.283770     0.435043
sqft_lot      -0.132109  0.089661  0.031703   0.087740     0.172826
floors         0.018525  0.256794  0.175429   0.500653     0.353949
yr_built       0.021380  0.054012  0.154178   0.506019     0.318049

               sqft_basement  sqft_lot    floors  yr_built
id                 -0.005151 -0.132109  0.018525  0.021380
price               0.323816  0.089661  0.256794  0.054012
bedrooms            0.303093  0.031703  0.175429  0.154178
bathrooms           0.283770  0.087740  0.500653  0.506019
sqft_living         0.435043  0.172826  0.353949  0.318049
sqft_basement       1.000000  0.015286 -0.245705 -0.133124
sqft_lot            0.015286  1.000000 -0.005201  0.053080
floors             -0.245705 -0.005201  1.000000  0.489319
yr_built           -0.133124  0.053080  0.489319  1.000000
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Python是一种功能强大的编程语言,可以用于各种数据分析任务。而在Python的数据分析工具库中,pandas是最受欢迎和广泛使用的工具之一。 Pandas提供了用于处理和分析数据的高级数据结构和函数。其最常用的数据结构是DataFrame,类似于Excel中的表格。通过Pandas,我们可以读取Excel文件,并将其转换为DataFrame对象进行进一步处理。 使用Pandas进行Excel数据分析的第一步是读取Excel文件。Pandas提供了read_excel函数,可以方便地读取Excel文件并转换为DataFrame对象。我们可以指定要读取的工作表、要保留的列、要跳过的行等。 一旦我们将Excel文件读取为DataFrame对象,我们可以使用Pandas提供的丰富函数和操作对数据进行各种处理和分析。例如,我们可以使用head()函数查看前几行数据,使用describe()函数获取数据的统计摘要,使用mean()函数计算平均值,使用groupby()函数对数据进行分组等等。 除了数据处理和分析,Pandas还提供了各种工具来处理缺失值和数据清洗。我们可以使用dropna()函数删除含有缺失值的行或列,使用fillna()函数将缺失值填充为指定的值,使用replace()函数替换数据中的特定值等。 在数据分析完成后,我们可以使用to_excel函数将DataFrame对象保存为Excel文件。在保存时,我们可以指定要保存的工作表、保存的位置和文件名等。 总之,Pandas是一个非常强大和灵活的库,可以使Python在处理Excel数据时变得更加简单和高效。无论是数据的读取、处理、分析还是保存,Pandas都提供了丰富而简洁的函数和操作,使得数据分析变得更加容易。 ### 回答2: Pandas是一个功能强大的数据分析工具,可以轻松地处理和分析各种数据。同时,Pandas还提供了许多用于读取、处理和写入Excel文件的功能,让我们能够更方便地从Excel文件中提取和处理数据。 在使用Pandas进行Excel数据分析时,我们首先需要使用`pandas.read_excel()`函数读取Excel文件,并将其存储为一个Pandas的DataFrame对象。这样可以轻松地使用Pandas的各种数据处理和分析功能。 Pandas提供了一系列的函数来处理Excel数据,比如对数据进行过滤、排序、计算统计量等。我们可以使用`head()`函数快速查看数据的前几行,使用`describe()`函数生成数据的统计概要信息,使用`sort_values()`函数对数据进行排序等。 除此之外,Pandas还提供了一些方便的函数来进行Excel数据的写入。我们可以使用`to_excel()`函数将DataFrame对象写入Excel文件,并通过参数来设置写入的Sheet名称、行列标签等。 除了基本的读写操作,Pandas还提供了丰富的数据转换和清洗功能,如数据合并、去重、填充空值等等。这些功能可以帮助我们更好地理解和分析Excel中的数据。 总而言之,Pandas是一个非常方便和强大的数据分析工具,可以让我们轻松地处理和分析Excel数据。通过Pandas,我们可以更加快速和高效地提取、清洗和分析数据,将Excel文件作为数据分析的重要来源之一。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汀、人工智能

十分感谢您的支持

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

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

打赏作者

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

抵扣说明:

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

余额充值