2.2.1数据读取与筛选
Pandas是Python中一个非常重要的数据分析库,它提供了高效地操作和处理各种数据结构的方法和工具。其中,最常用的数据结构之一是DataFrame,它是由行和列组成的二维表格,可以存储和处理各种数据类型的数据。
在Pandas中,我们可以通过多种方式来创建DataFrame,包括通过列表、字典、二维数组等方式。下面我们来逐一介绍:
通过列表创建DataFrame
我们可以通过传入一个二维列表来创建DataFrame,其中每一个子列表代表一行数据,如下所示:
import pandas as pd
data = [['丁一', 90], ['王二', 80], ['张三', 70]]
df = pd.DataFrame(data, columns=['姓名', '成绩'])
print(df)
这里我们传入的二维列表中包含了三行数据,分别是['丁一', 90]、['王二', 80]和['张三', 70]。同时我们还指定了每列的名称,分别是'姓名'和'成绩',通过这些数据我们即可创建一个DataFrame对象。
通过字典创建DataFrame
我们也可以通过传入一个字典来创建DataFrame,其中字典的键值对代表DataFrame中的一列数据,如下所示:
import pandas as pd
data = {'姓名': ['丁一', '王二', '张三'], '成绩': [90, 80, 70]}
df = pd.DataFrame(data)
print(df)
这里我们传入的字典中包含了两列数据,分别是'姓名'和'成绩'。由于每列数据的长度相同,所以我们无需再指定行索引。
通过二维数组创建DataFrame
我们也可以通过传入一个二维数组来创建DataFrame,其中数组中的每一行代表一行数据,如下所示:
import pandas as pd
import numpy as np
data = np.array([['丁一', 90], ['王二', 80], ['张三', 70]])
df = pd.DataFrame(data, columns=['姓名', '成绩'])
print(df)
这里我们使用了NumPy库中的ndarray对象来创建了一个二维数组,然后通过传入该数组来创建一个DataFrame。同时我们还指定了每列的名称,分别是'姓名'和'成绩'。
修改行索引或列索引名称
我们可以通过rename()函数来修改DataFrame中行索引和列索引的名称,如下所示:
import pandas as pd
data = {'姓名': ['丁一', '王二', '张三'], '成绩': [90, 80, 70]}
df = pd.DataFrame(data)
df = df.rename(index={0: '学生1', 1: '学生2', 2: '学生3'}, columns={'姓名': '名字', '成绩': '分数'})
print(df)
这里我们使用了rename()函数来分别将第一行、第二行和第三行的索引名称分别修改为'学生1'、'学生2'和'学生3',同时将'姓名'这一列的列名修改为'名字',将'成绩'这一列的列名修改为'分数'。
2.2.2 Excel等文件的读取和写入
在数据分析中,Excel和CSV等文件的读取和写入是必不可少的操作。Pandas提供了很方便的读写文件的函数,我们可以轻松地将数据从文件中读入,或者将数据输出到文件中。
读取文件
我们以Excel和CSV文件为例,介绍如何使用Pandas读取数据。
Excel文件读取
使用pd.read_excel()
函数可以读取Excel文件,常用的参数有:
filepath_or_buffer
:文件路径,可以是相对路径或绝对路径。sheet_name
:工作表名称,可以是索引或名称,默认读取第一个工作表。header
:指定表头所在行数,默认为0。index_col
:指定索引所在列数,默认为0。usecols
:需要读取的列。dtype
:指定数据类型。na_values
:指定缺失值的标识符。
下面是读取Excel文件的示例:
import pandas as pd
# 读取Excel文件
data = pd.read_excel('data.xlsx')
# 读取指定工作表和列
data = pd.read_excel('data.xlsx', sheet_name='Sheet1', usecols=['A', 'B', 'E'])
# 指定表头所在行数
data = pd.read_excel('data.xlsx', header=1)
# 指定索引所在列数
data = pd.read_excel('data.xlsx', index_col=0)
CSV文件读取
使用pd.read_csv()
函数可以读取CSV文件,常用的参数有:
filepath_or_buffer
:文件路径,可以是相对路径或绝对路径。header
:指定表头所在行数,默认为0。index_col
:指定索引所在列数,默认为None,表示不使用索引。delimiter
:分隔符,默认为','。usecols
:需要读取的列。dtype
:指定数据类型。na_values
:指定缺失值的标识符。
下面是读取CSV文件的示例:
import pandas as pd
# 读取CSV文件
data = pd.read_csv('data.csv')
# 读取指定列
data = pd.read_csv('data.csv', usecols=['A', 'B', 'E'])
# 指定表头所在行数
data = pd.read_csv('data.csv', header=1)
# 指定索引所在列数
data = pd.read_csv('data.csv', index_col=0)
写入文件
使用to_excel()
和to_csv()
函数可以将数据写入Excel和CSV文件中。常用的参数有:
path_or_buf
:文件路径,可以是相对路径或绝对路径。sheet_name
:工作表名称。header
:是否包含表头。index
:是否包含索引。encoding
:文件编码。
下面是写入Excel和CSV文件的示例:
import pandas as pd
# 写入Excel文件
data.to_excel('data_new.xlsx', index=False, sheet_name='Sheet1')
# 写入CSV文件
data.to_csv('data_new.csv', index=False, encoding='utf-8')
其中,index=False
表示不包含索引,encoding='utf-8'
表示使用UTF-8编码。
2.2.3 数据读取与筛选
Pandas提供了很多方法来对数据进行筛选和选取,这里我们介绍几个常用的方法。
按照行列进行数据筛选
按照列来选取数据
通过列名来选取数据,可以使用如下方法:
# 选取单列
a = data['c1']
# 选取多列,需要使用双重方括号
b = data[['c1', 'c3']]
按照行来选取数据
通过行号或索引名来选取数据,可以使用如下方法:
# 选取区块
a = data[1:3]
# 使用iloc函数选取区块
b = data.iloc[1:3]
# 使用loc函数选取单行
c = data.loc['r3']
# 使用loc函数选取多行
d = data.loc[['r1', 'r2']]
# 使用head函数查看前5行
e = data.head()
其中,iloc
函数可以使用行号选取区块,loc
函数可以使用索引名选取区块。
按照区块来选取数据
条件比较复杂时,可以按照区块来选取数据。例如,我们需要选取第1列和第3列,并且第1行到第2行的数据,可以使用如下方法:
# 使用ix函数选取区块
a = data.ix[0:2, ['c1', 'c3']]
在ix
函数中,第一个参数为行号区块,第二个参数为列名区块。当然,也可以使用loc
和iloc
函数来实现:
# 使用loc函数
d = data.loc[['r1', 'r2'], ['c1', 'c3']]
# 使用iloc函数
e = data.iloc[0:2, [0, 2]]
在进行数据分析时,通常需要对数据进行筛选、整体情况查看、数据运算、排序和删除等操作。在Python中,pandas库提供了许多方便的函数来进行这些操作。
首先,我们可以按照特定条件对数据进行筛选,例如我们要选出c1列中大于1的数据:
a = data[data['c1'] > 1]
print(a)
我们也可以按照多个条件来进行筛选,例如我们要选出c1列大于1并且c2列小于8的数据:
b = data[(data['c1'] > 1) & (data['c2'] < 8)]
print(b)
接下来我们可以对整个数据进行情况查看,例如数据的维度和基本统计信息:
print(data.shape)
print(data.describe())
print(data['c1'].value_counts())
数据运算也是数据分析中常用的操作,例如我们要将c3列减去c1列得到新的一列c4:
data['c4'] = data['c3'] - data['c1']
data.head()
数据的排序也是常用的操作,我们可以按照某一列升序或降序排列,例如按照c2列降序排列:
a = data.sort_values(by='c2', ascending=False)
print(a)
我们也可以按照多列来进行排序:
a = data.sort_values(['c2', 'c3'], ascending=[False, True])
print(a)
数据删除也是必不可少的操作,我们可以根据列名或行名来进行删除:
a = data.drop(columns='c1')
print(a)
b = data.drop(columns=['c1', 'c3'])
print(b)
c = data.drop(index=['r1','r3'])
print(c)
最后,如果想对原始数据进行修改,需要使用inplace=True参数:
data.drop(index=['r1','r3'], inplace=True)
print(data)
以上就是常用的数据筛选、整体情况查看、数据运算、排序和删除等操作,pandas库提供了方便的函数来帮助我们完成这些操作,使数据分析更加高效和简便。
初步尝试 - 股票数据读取与可视化
在本文中,我们将初步学习如何使用Python中的Tushare库读取股票数据,并利用Matplotlib库和mpl_finance库绘制股票走势图和K线图。
- 股票数据库:Tushare库的安装与使用
首先,我们需要安装Tushare库:
!pip install tushare
安装完成后,我们可以通过以下代码获取某支股票(如万科)的股价数据:
import tushare as ts
df = ts.get_k_data('000002', start='2009-01-01', end='2019-01-01')
其中,'000002'代表万科股票代码,start和end分别代表查询开始和结束日期。
我们可以使用以下代码将数据保存成Excel文件:
df.to_excel('股价数据.xlsx', index=False)
- 绘制股票走势图
接下来,我们将使用Matplotlib库绘制万科股票的走势图。我们可以先将数据中的日期列设置为索引:
df.set_index('date', inplace=True)
然后,使用以下代码绘制股票走势图:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
df['close'].plot(title='万科股价走势图')
需要注意的是,如果直接使用Matplotlib库画图,我们需要先将日期格式转换成datetime类型:
from datetime import datetime
df['date'] = df['date'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))
import matplotlib.pyplot as plt
plt.plot(df['date'], df['close'])
plt.show()
- 绘制股票K线图
接下来,我们将使用mpl_finance库绘制股票K线图。在绘制K线图之前,我们需要先了解K线图的基本知识。
3.1 股票K线图基本知识
股票K线图是股票技术分析中的一种常用图表形式,可以展现出股票每日的开盘价、收盘价、最高价、最低价等信息,以及股价趋势的变化。
K线图中包括了实体、影线、颜色等概念:
- 实体:实体代表开盘价和收盘价之间的价格波动。当实体为绿色或红色时,表示股价下跌或上涨;实体为白色或黑色时,表示股价上涨或下跌。
- 影线:影线代表股价波动的最高价和最低价之间的价格变化。
- 颜色:通常情况下,K线图中的实体或影线颜色会根据开盘价和收盘价之间的价格波动情况来显示。比如,如果收盘价高于开盘价,实体通常为绿色或红色。
3.2 绘制股票K线图
为了绘制股票K线图,我们需要先安装mpl_finance库:
!pip install https://github.com/matplotlib/mpl_finance/archive/master.zip
接下来,我们可以使用以下代码绘制万科股票的K线图:
import tushare as ts
import matplotlib.pyplot as plt
import mpl_finance as mpf
import seaborn as sns
sns.set()
# 获取股票数据
df = ts.get_k_data('000002', start='2009-01-01', end='2019-01-01')
df['date'] = df['date'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))
# 绘制K线图
fig, ax = plt.subplots(figsize=(16,8))
fig.subplots_adjust(bottom=0.2)
mpf.candlestick2_ochl(ax, df['open'], df['close'], df['high'], df['low'], width=0.6, colorup='r', colordown='g', alpha=1.0)
plt.grid(True)
plt.title('万科股票K线图')
plt.xlabel('日期')
plt.ylabel('股价')
plt.show()
在绘制K线图之前,我们还需要引入Seaborn库,以美化图表。
至此,我们已经初步学习了如何使用Python绘制股票走势图和K线图的基本方法。当然,这只是刚刚开始,我们还可以通过各种各样的数据处理和可视化技巧,来进一步深入了解股票市场和股票走势。