**Python实现Excel数据分析基础**

Python实现Excel数据分析基础

相关数据及程序下载:
链接:https://pan.baidu.com/s/1UqGERC_SfO7OObw-nx3SFw
提取码:mq0k

Excel文件内省

Excel文件(扩展名为.xls/.xlsx),与CSV文件至少有两个重要的不同点。
一,Excel文件不是纯文本文件,无法通过文本编辑器查看数据。
二,Excel工作簿被设计成多个工作表。
因此,我们需要在不打开Excel文件的前提下,通过Excel工作簿内省(内部检查),获取其中所有工作表的信息。在处理数据之前,确认使用数据就是我们所需要的。
确认工作簿中工作表的数量、名称和每个工作表中行列的数量,输入以下代码,对sales_2013文件进行检查:

#!/usr/bin/env python3
import sys
from xlrd import open_workbook
input_file = sys.argv[1]
workbook = open_workbook(input_file)
print('Number of worksheets:',workbook.nsheets)
for woksheet in workbook.sheets():
    print("Worksheet name:",worksheet.name,"\tRows:",\worksheet.nraows,"\tColumns:",worksheet.ncols)

注:关于程序中sys.argv[ ]的使用参考:
https://blog.csdn.net/weixin_43754278/article/details/107620632

在cmd中,输入下入列程序:
在这里插入图片描述
输出如下:
在这里插入图片描述
通过这段程序,我们可以大概了解到Excel文件(sales_2013)中,有三个工作表,每个工作表中有7行5列。

读写Excel文件

读取Excel文件的具体解释,可以参考博客完成:
https://blog.csdn.net/weixin_43754278/article/details/107620632

这里,我们通过pandas读取sales_2013.xlsx文件中的第一个表格,january_2013,进行分析。打印出DataFrame:
在这里插入图片描述

Excel数据分析

接下来的例子中,我们将使用pandas库进行分析,基础python代码有兴趣的朋友可以查阅《python数据分析》。

筛选特定条件的行

目标:筛选出Sale Amount 大于$1400.00的行
使用pandas筛选出某个条件的行,可以通过判定条件迅速的选出所需要的。还可以通过逻辑顺序,进行多个条件的选择。如‘&’、‘|’等。
创建Script1.py文件,写入下列程序:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f,'january_2013',index=False)
df_condition = df[df['Sale Amount'].astype(float)>1400.0]   #筛选条件
writer = pd.ExcelWriter(output_f)
df_condition.to_excel(writer,sheet_name='jan_13_output',index=False)
writer.save()

print(df_condition)

在命令行(cmd)中,对应路径下,输入py文件+读取文件+输出文件,就可以得到大于1400的行:
在这里插入图片描述

集合索引

行列中的值属于某个集合

目标:筛选出购买日期为01/24/2013或01/31/2013的行
pandas提供了isin()函数,通过它来检验特定值是否在列表中。

创建Script2.py文件,写入下列程序:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f,'january_2013',index_col=None)
df_condition = ['1/24/2013','1/31/2013']
get_df = df[df['Purchase Date'].isin(df_condition)]
writer = pd.ExcelWriter(output_f)
get_df.to_excel(writer,sheet_name='jan_13_output',index=False)
writer.save()

print(df['Purchase Date'])
print('-------')
print(df_condition)
print('-------')
print(df['Purchase Date'].isin(df_condition))
print('-------')
print(get_df)

分别print出的结果,不明白的地方可以对应程序,多看一下。最好动手尝试一下。
在这里插入图片描述

行中的值匹配特定模式

目标:筛选出客户姓名以大写字母J开头的行。
pandas提供了若干字符串和正则表达式函数,包括startswich,endswith,match和serch等,可以使用这些函数在文本识别字符串和模式
创建Script3.py文件,写入下列程序:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f,'january_2013',index=None)
df_match = df[df['Customer Name'].str.startswith('J')]
writer = pd.ExcelWriter(output_f)
df_match.to_excel(writer,sheet_name='jan_13_output3',index=False)
writer.save()
print(de_match)

在cmd中输出结果:
在这里插入图片描述

选取特定的列

除了直接设置数据框外,即在方括号中列出要保留的列索引值或名称。选取列的方法有两种通用的方法,使用列索引值和列标题。

列索引值

通过数据框和iloc函数索进行引。通过iloc函数索引需要保留所有行,例如iloc[:,[1,4]]表示第2列和第5列,第一列为0。iloc[:,[1:4]]表示第2列到第5列。
创建Script4.py,读取第2列和第5列并写入代码:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f,'january_2013',index=None)
df_col_index = df.iloc[:,[1,4]]
writer = pd.ExcelWriter(output_f)
df_col_index.to_excel(writer,sheet_name='jan_13_output4',index=False)
writer.save()
print(df_col_index)

同样,在cmd中输出,结果如下:
在这里插入图片描述

列标题

当我们研究的excel文件中,列标题十分容易识别,且标题不变的时候,采用列标题索引使得分析更加简便。
pandas选定列时,一种方式是在数据框名称后的方括号中将列明以字符串的形式列出。另一种是使用loc函数。
创建Script5.py,并且编写代码:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f,'january_2013',index=None)
df_name_index = df.loc[:,['Customer','Purchase Date']]
writer = pd.ExcelWriter(output_f)
df_name_index.to_excel(writer,sheet_name='jan_13_output5',index=False)
writer.save()
print(df_name_index)

cmd中输入,并得到结果:
在这里插入图片描述

读取工作簿中所有工作表

我们提供两个范例,演示在所有工作表中筛选特定的行和列。
在panda中,通过在read_excel函数中设置sheetname=None,可以一次性读取工作簿中的所有工作表。接下来,我们尝试一下筛选销售额大于2000.00的所有行。
创建Script5.py,并且编写代码:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f, sheet_name=None, index_col=None)
row_output = []
for worksheet_name,data in df.items():
    row_output.append(data[data['Sale Amount'].astype(float)>2000.00])
filtered_rows = pd.concat(row_output,axis=0,ignore_index = True)
writer = pd.ExcelWriter(output_f)
filtered_rows.to_excel(writer,sheet_name='sale_amount_2000',index=False)
writer.save()
print(filtered_rows)

cmd中,输出结果为:
在这里插入图片描述第二个例子:
在所有工作表中选取Customer Name 和 Sale Amount 列。
创建Script6.py,并且编写代码:

#!/usr/bin/env python3
import pandas as pd
import sys
input_f = sys.argv[1]
output_f = sys.argv[2]
df = pd.read_excel(input_f, sheet_name=None, index_col=None)
col_output = []
for worksheet_name,data in df.items():         # 表示df中的键和值
    col_output.append(data.loc[:,['Customer Name','Sale Amount']])
selected_cols = pd.concat(col_output,axis=0,ignore_index = True)

writer = pd.ExcelWriter(output_f)

selected_cols.to_excel(writer,sheet_name='seleced_col_all_worksheets',index=False)
writer.save()
print(selected_cols)

cmd中,输出结果为:

在这里插入图片描述注:文章参考《python数据分析基础》

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Python代码示例,用于聚类分析店铺在旺季的表现。 首先,我们需要导入所需的库和数据集: ```python import pandas as pd import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt # 读取数据集 df = pd.read_excel('sales_data.xlsx') ``` 接下来,我们需要对数据集进行预处理,包括删除无用的列、处理缺失值和标准化数据: ```python # 删除无用的列 df = df.drop(columns=['店铺名称', '日期']) # 处理缺失值 df = df.fillna(0) # 标准化数据 df = (df - df.mean()) / df.std() ``` 然后,我们可以使用K-means算法对数据进行聚类分析,确定最佳的聚类数: ```python # 寻找最佳的聚类数 inertias = [] for k in range(1, 11): kmeans = KMeans(n_clusters=k, random_state=0).fit(df) inertias.append(kmeans.inertia_) plt.plot(range(1, 11), inertias) plt.title('Elbow Method') plt.xlabel('Number of Clusters') plt.ylabel('Inertia') plt.show() ``` 根据上述代码,我们可以得到以下图表: ![elbow_method](https://i.imgur.com/5KlDQlj.png) 根据“肘部法则”,我们可以看到在聚类数为3时,惯性急剧下降,因此我们将聚类数设置为3: ```python # 使用K-means算法进行聚类分析 kmeans = KMeans(n_clusters=3, random_state=0).fit(df) # 输出每个数据点的聚类标签 labels = kmeans.labels_ print(labels) ``` 最后,我们可以将每个数据点的聚类标签添加到原始数据集中,并将其输出到一个新的Excel文件中: ```python # 将聚类标签添加到原始数据集中 df['聚类标签'] = labels # 将数据输出到Excel文件中 df.to_excel('sales_data_clustered.xlsx', index=False) ``` 这样,我们就成功地将Excel数据进行了聚类分析,并将结果输出到了一个新的Excel文件中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值