Python处理excel数据(四)

Python数据分析

一、读取CSV、TSV、TXT中的数据

1、读取CSV文件

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

import pandas as pd

students1=pd.read_csv('D:/Temp/Students.csv',index_col='ID')
print(students1)

在这里插入图片描述
注意:无论是读取csv文件还是读取TSV 、TXT文件都需要用pd.read_csv进行读取

2、读取TSV文件

import pandas as pd
students2=pd.read_csv('D:/Temp/Students.tsv',sep='\t',index_col='ID')
print(students2)

3、读取TXT文件

import pandas as pd
students3=pd.read_csv('D:/Temp/Students.txt',sep='|',index_col='ID')
print(students3)

在这里插入图片描述
在这里插入图片描述

二、透视表、分组、聚合

1、透视表

a、原始数据

数据很多,只截图前面和后面的
ID:销售ID
Total:销售总额
Date:销售时间
Product:卖的什么产品
Subcategor:这个产品隶属于那个子类
Category:这个产品隶属于那个大类
在这里插入图片描述
在这里插入图片描述

b、打印前5行数据
import pandas as pd

pd.options.display.max_columns=999
orders=pd.read_excel('D:/Temp/Orders.xlsx')

print(orders.head())

在这里插入图片描述

import pandas as pd

pd.options.display.max_columns=999
orders=pd.read_excel('D:/Temp/Orders.xlsx')
orders['Year'] = pd.DatetimeIndex(orders.Date).year
print(orders.head())

在这里插入图片描述

import pandas as pd
import numpy as np

pd.options.display.max_columns=999
orders=pd.read_excel('D:/Temp/Orders.xlsx')
orders['Year'] = pd.DatetimeIndex(orders.Date).year

pt1=orders.pivot_table(index='Category',columns='Year',values='Total')
print(pt1)

在这里插入图片描述

c、对数据进行分组整合

其中对表中提取到每个产品的销售时间、卖了多少件和钱数

import pandas as pd

pd.options.display.max_columns=999
orders=pd.read_excel('D:/Temp/Orders.xlsx')
orders['Year'] = pd.DatetimeIndex(orders.Date).year



groups = orders.groupby(['Category', 'Year'])#对数据进行分组
s = groups['Total'].sum() #买了多少钱
c = groups['ID'].count() #买了多少件

pt2 = pd.DataFrame({'Sum': s, 'Count': c}) #把两列放在一块
print(pt2)

在这里插入图片描述

透视表、分组、整合

三、线性回归、数据预测

1、线性回归

a、原始数据

在这里插入图片描述

import pandas as pd
import matplotlib.pyplot as plt

sales = pd.read_excel('D:/Temp/Sales.xlsx', dtype={'Month': str})
print(sales)

plt.bar(sales.index,sales.Revenue)#柱状图
plt.title('Sales')
plt.xticks(sales.index,sales.Month,rotation=90)
plt.tight_layout()#紧凑布局
plt.show()

在这里插入图片描述

b、画趋势线

线性回归方程

import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress #引用科学计算库,关于统计相关的库,linregress线性回归的缩写

sales = pd.read_excel('D:/Temp/Sales.xlsx', dtype={'Month': str})
print(sales)

#slope:坡度、斜率;
# intercept:在y轴的截距
#r:
#p:
#std_err:标准差
#sales.index, sales.Revenue对应得分别是X轴,Y轴
slope, intercept, r, p, std_err = linregress(sales.index, sales.Revenue)
#exp:期望值,
exp = sales.index * slope + intercept

plt.scatter(sales.index,sales.Revenue)#柱状图
plt.plot(sales.index,exp,color='orange')
plt.title('Sales')
plt.xticks(sales.index,sales.Month,rotation=90)
plt.tight_layout()#紧凑布局
plt.show()

在这里插入图片描述
线性回归方程的值

plt.title('Sales')

换成

plt.title(f"y={slope}*X+{intercept}")

在这里插入图片描述

2、数据预测

import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress #引用科学计算库,关于统计相关的库,linregress线性回归的缩写

sales = pd.read_excel('D:/Temp/Sales.xlsx', dtype={'Month': str})
print(sales)

#slope:坡度、斜率;
# intercept:在y轴的截距
#r:
#p:
#std_err:标准差
#sales.index, sales.Revenue对应得分别是X轴,Y轴
slope, intercept, r, p, std_err = linregress(sales.index, sales.Revenue)
#exp:期望值,
exp = sales.index * slope + intercept

print(slope*35+intercept)#数据预测的值,35的值是指编号为35的列,也是2019的一年12月,从23往后开始

plt.scatter(sales.index,sales.Revenue)#柱状图
plt.plot(sales.index,exp,color='orange')
plt.title(f"y={slope}*X+{intercept}")
plt.xticks(sales.index,sales.Month,rotation=90)
plt.tight_layout()#紧凑布局
plt.show()

在这里插入图片描述
在这里插入图片描述
数据预测2019一年的值
在这里插入图片描述

四、行操作、列操作

1、行操作

a、原始数据

在这里插入图片描述

# 追加已有
students = page_001.append(page_002).reset_index(drop=True)

# 追加新建
stu = pd.Series({'ID': 41, 'Name': 'Abel', 'Score': 90})
students = students.append(stu, ignore_index=True)

# 删除(可切片)
students = students.drop(index=[39, 40])

# 插入
stu = pd.Series({'ID': 100, 'Name': 'Bailey', 'Score': 100})
part1 = students[:21]  # .iloc[] is the same
part2 = students[21:]
students = part1.append(stu, ignore_index=True).append(part2).reset_index(drop=True)

# 更改
stu = pd.Series({'ID': 101, 'Name': 'Danni', 'Score': 101})
students.iloc[39] = stu

# 设置空值
for i in range(5, 15):
    students['Name'].at[i] = ''

# 去掉空值
missing = students.loc[students['Name'] == '']
students.drop(missing.index, inplace=True)

print(students)

2、列操作

a、原始数据

在这里插入图片描述

import pandas as pd
import numpy as np

page_001=pd.read_excel('D:/Temp/Students.xlsx',sheet_name='Page_001')
page_002=pd.read_excel('D:/Temp/Students.xlsx',sheet_name='Page_002')


#两张表放在一起
students=pd.concat([page_001,page_002])
print(students)

在这里插入图片描述
两张一样的表放在一起(串联)

#两张表放在一起(串联)
students=pd.concat([page_001,page_002]).reset_index(drop=True)

在这里插入图片描述
两张表放在一起(并联):

students=pd.concat([page_001,page_002],axis=1)

在这里插入图片描述
追加列:

import pandas as pd
import numpy as np

page_001=pd.read_excel('D:/Temp/Students.xlsx',sheet_name='Page_001')
page_002=pd.read_excel('D:/Temp/Students.xlsx',sheet_name='Page_002')

#两张表放在一起(并联)
students=pd.concat([page_001,page_002]).reset_index(drop=True)
students['Age']=25 #追加一列年龄25
print(students)

在这里插入图片描述

students['Age']=np.arange(0,len(students)) #追加一列年龄25

在这里插入图片描述
删除列:

students.drop(columns=['Age','Score'],inplace=True)#删除Age和score两列

在这里插入图片描述
在ID和Name中间插入一列

# 插入列
students.insert(1, column='Foo', value=np.repeat('foo', len(students)))

在这里插入图片描述

# 改列名
students.rename(columns={'Foo': 'FOO', 'Name': 'NAME'}, inplace=True)

在这里插入图片描述
设置空值

students['ID'] = students['ID'].astype(float)
for i in range(5, 15):
students['ID'].at[i] = np.nan

在这里插入图片描述

# 去掉空值
students.dropna(inplace=True)

在这里插入图片描述

五、复杂计算列

1、原始数据

在这里插入图片描述
第一种方法

import pandas as pd
import numpy as np


#计算外接圆的面积
def get_circumcircle_area(l, h):  #两个边长
    r = np.sqrt(l ** 2 + h ** 2) / 2
    return r ** 2 * np.pi

#填充计算列只是一行,现在填取多列
def wrapper(row):
    return get_circumcircle_area(row['Length'], row['Height'])


rects = pd.read_excel('D:/Temp/Rectangles.xlsx', index_col='ID')
rects['C A'] = rects.apply(wrapper, axis=1)
print(rects)

第二种方法

import pandas as pd
import numpy as np


#计算外接圆的面积
def get_circumcircle_area(l, h):  #两个边长
    r = np.sqrt(l ** 2 + h ** 2) / 2
    return r ** 2 * np.pi



rects = pd.read_excel('D:/Temp/Rectangles.xlsx', index_col='ID')
rects['C A'] = rects.apply(lambda row: get_circumcircle_area(row['Length'], row['Height']), axis=1)
print(rects)

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值