pandas笔记集 (一)
** 版权所有 By Excel **
使用pandas库实现以下内容:
1) 读取文件“SH#600519.xlsx”中有关股票的数据。
2) 设计并实现一组命令行下的选择列表,用户通过此列表可以完成如下的功能:
- i. 显示某个输入的日期的当日数据。(注:当日数据应包括日期、开盘、最高、最低、收盘、成交量、成交额)
- ii. 显示收盘价高于某个输入的价格的所有日期。
- iii. 显示股价波动高于某个输入的值的所有日期。(注:股价波动即为最高价减去最低价的值)
- iv. 显示成交量高于某个输入的值的所有日期。
- v. 显示成交额高于某个输入的值的所有日期。
分析:
难点:
实验内容不难,难度在处理excel文件数据上,原excel表头:

在读取时,需要处理前2行(忽略第1行,设置第2行为列标题)
实验思路:
1. 读取excel文件 ---> 生成Dataframe ---> 替换列标题 ---> 删去第一行数据 --->数据筛选
2. 读取excel文件(设置相关参数,完成前两行的处理) ---> 生成Dataframe ---> 数据筛选
实验过程:
(一)准备工作
1: 思路1:
1.1: 使用pandas库读取excel文件可用语句:
# 读字符(r)+ 文件所在地址
excel_file = r'/home/excel/python_program/data/lab1/SH#600519.xlsx'
# 读取 excel文件
data = pd.read_excel(excel_file)
1.2:生成一组 DataFrame:
df = pd.DataFrame(data)
1.3: 修改列标题
head = df.columns.values.tolist()
'''
打印输出原列名
'''
print(head)
运行结果:

第二行的数据才是列标题,因此我们需要替换列标题。
替换的方法:
'''
修改列名:
df.rename(columns={'原列名':'新列名'},inplace=True)
替换所有的列标题:
'''
for i in range (len(head)):
df.rename(columns={head[i]:df.iloc[0,i]},inplace=True)
运行结果,再次查询列标题:
'''
修改后的列名
'''
head=df.columns.values.tolist()
print(head)

1.4: 删除数据:
由于在生成df时,第二行数据是 【‘日期’,‘开盘’.... ,】
查看df:

df的第一行数据需删除
df = df.drop(0,axis=0,inplace=False)
到这里,我们就已经完成了df前2行的处理

2: 思路2:
2.1:在读取excel时设置相关参数:
'''
io: 文件所在目录,
header: 取 第header行 作为列标题
skiprows: 需跳过的行数
'''
test = pd.read_excel(io=excel_file,
header=1,
skiprows=0)
生成dfs :
dfs = pd.DataFrame(test)
查看dfs :

(二)按要求筛选数据
i) 显示某个输入的日期的当日数据。(注:当日数据应包括日期、开盘、最高、最低、收盘、成交量、成交额)
df.loc[(df[head[2]]>0),head].head()

ii) 显示收盘价高于某个输入的价格的所有日期。
flag=(int)(input())
df.loc[
(df[head[4]]>flag),
head
].head()

iii) 显示股价波动高于某个输入的值的所有日期。
flag=(int)(input())
df.loc[
(df[head[4]]>flag),
head
].head()

iv) 显示成交量高于某个输入的值的所有日期。
df.loc[
(df[head[5]]>turnover),
head
].head()

v)显示成交额高于某个输入的值的所有日期。
df.loc[(df[head[6]]>sums),
[head[0],head[1],head[2],
head[3],head[4],head[5],head[6]]
].head()


浙公网安备 33010602011771号