持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
今天是十月更文计划第四天,第七篇
Pandas实战
二维数组DataFrame
二维数组DataFrame对象
df = pd.DataFrame(np.random.randint(1, 20, (5,3)),
index=range(5),
columns=['A', 'B', 'C'])
print(df)
输出的结果如下:
模拟2021年9月15日某超市熟食、化妆品、日用品每小时的销量使用时间序列作为索引
df = pd.DataFrame(np.random.randint(5, 15, (13, 3)),
index=pd.date_range(start='202109150900',
end='202109152100',
freq='H'),
columns=['熟食', '化妆品', '日用品'])
print(df)
print('='*20)
输出的结果如下:
使用字典创建Dataframe
df = pd.DataFrame({'语文':[87,79,67,92],
'数学':[93,89,80,77],
'英语':[90,80,70,75]},
index=['张三', '李四', '王五', '赵六'])
print(df)
print('='*20)
输出的结果如下:
以某超市销售数据显示Pandas读取Excel文件创建DataFrame对象,并进行数据操作
这里有一个超市销售csv文件,来对这个数据进行操作学习:
读取工号、姓名、时段、交易额这四列数据,使用默认索引
import pandas as pd
# 设置列对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel(r'超市营业额2.xlsx', usecols=['工号','姓名','时段','交易额'])
print(df[:10], end='\n\n')
# 读取第一个worksheet中所有列
# 跳过第1、3、5行,指定下标为1的列中数据为DataFrame的行索引标签
df = pd.read_excel(r'C:\Users\lenovo\超市营业额2.xlsx',
skiprows=[1,3,5], index_col=1)
print(df[:10])
输出前10行数据,输出的结果如下:
使用方法来对数据进行文件操作:
df = pd.read_excel(r'超市营业额2.xlsx')
print('下标在[5,10]区间的的行'.ljust(20, '='))
print(df[5:11])
print('索引为5的行'.ljust(20,'='))
print(df.iloc[5])
print('下标为[3,5,10]的行'.ljust(20, '='))
print(df.iloc[[3,5,10],:])
print('行下标为[3,5,10],列下标为[0,1,4]'.ljust(30, '=')) #共9个数据
print(df.iloc[[3,5,10],[0,1,4]])
print('查看指定的列前5行数据'.ljust(20,'='))
print(df[['姓名', '时段', '交易额']][:5])
print('只查看前10行指定的列'.ljust(20, '='))
print(df[:10][['姓名', '日期', '柜台']])
输出的结果如下:
print('查看交易额统计信息'.ljust(20, '='))
print(df['交易额'].describe()) #describe方法可以查看“交易额”列的统计信息
print('交易额四分位数'.ljust(20, '='))
print(df['交易额'].quantile([0, 0.25, 0.5, 0.75, 1.0]))
print('交易额中值'.ljust(20, '='))
print(df['交易额'].median())
print('交易额最小的3条记录'.ljust(20, '='))
print(df.nsmallest(3, '交易额'))
print('交易额最大的5条记录'.ljust(20, '='))
print(df.nlargest(5, '交易额'))
print('最后一个日期'.ljust(20, '='))
print(df['日期'].max())
print('最小的工号'.ljust(20, '='))
print(df['工号'].min())
输出的结果如下:
对数据进行排序:
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 读取全部数据,使用默认索引
df = pd.read_excel(r'超市营业额2.xlsx')
print('按交易额和工号降序排序'.ljust(20, '=')) 序
print(df.sort_values(by=['交易额','工号'], ascending=False)[:12]) #输出前12行
print('按交易额降序、工号升序排序'.ljust(20, '='))
print(df.sort_values(by=['交易额','工号'], ascending=[False,True])[:12])
print('按工号升序排序'.ljust(20, '='))
print(df.sort_values(by='工号', na_position='last')[:10])
print('按列名升序排序'.ljust(20, '='))
print(df.sort_index(axis=1, ascending=True)[:10])
输出的结果如下: