#使用array()创建一个多维数组
import numpy as np
arr=np.array([1,2,3])
修改数组的元素类型
方差是标准差的平方
索引值变为a,b,c,d。
dic={
'张三':[150,150,150,300],
'李四':[0,0,0,0]
}
df=DataFrame(data=dic,index=['语文','数学','英语','理综'])
df
- 取单列
- 取a,c两列
import tushare as ts
import pandas as pd
from pandas import DataFrame,Series
import numpy as np
# 获取某只股票的历史行情数据
df=ts.get_k_data(code='600519',start='2000-01-01')
df
# 将互联网上获取的股票数据存储到本地
df.to_csv('./maotai.csv')
# 将本地存储的数据读入到df中
pd.read_csv('./maotai.csv')
df.head()
# 对读取出的数据进行相关处理
# 查看每一列的数据类型
df['date'].dtype
# 另一种方法
df.info()
# 将time列转换为时间序列
df['date']=pd.to_datetime(df['date'])
df['date'].dtype
# 将时间作为原数据的行索引
df.set_index('date',inplace=True)
df.head()
### 需求1:输出所有 收盘比开盘上涨3%的日期
# 伪代码:(收盘-开盘)/开盘 > 0.03
true_index=(df['open']-df['close'])/df['open']>0.03 # 获取到行索引
new=df.loc[true_index]## 得到全是股票上涨的数组
new.index
(new['open']-new['close'])/new['open']>0.03 #验证一下获取到的数据
(df['open']-df['close'])/df['open']>0.03 # 原来是有true用false
### 需求2:输出开盘比前日收盘跌幅超过2%的日期
# 伪代码:(开盘-前日收盘)/前日收盘 < -0.02
df['close']
# 使原始代码的close列整体下移一位
# 前日收盘
df['close'].shift(1)
# 成功获取到索引
(df['open']-df['close'].shift(1))/df['close'].shift(1)<-0.02
# 成功获取到日期
df.loc[(df['open']-df['close'].shift(1))/df['close'].shift(1)<-0.02].index
### 需求3: ![image-3.png](attachment:image-3.png)
# 时间节点2010-2023
#一手股票:100支股票
# 一个完整的年,需要买/卖多少支股票?1200
# 单价使用开盘价
new=df['2010-01':'2023-6'] #行索引是时间序列才可以这样切
new
# 获取每个月的第一个交易日——使用 数据的重新取样技术
# 根据月份从原始数据中提取每月第一个交易日
the_first=new.resample('M').first()
the_first
the_first['open']
有两种丢失数据
None
对象类型
np.nan
浮点类型
不能删除列,只能删除行。
需使用到isnull ,notnull ,any ,all
理解:
将原始数据进行横向或纵向的拼接
横向级联就是将列表在水平方向延伸
列向级联就是在竖直方向延伸
水平方向的级联
不匹配级联时,若想保留数据的完整性,必须使用outer(外级联)==
竖直方向的级联
append只能进行列向级联,且是外级联
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
df1=DataFrame(data=np.random.randint(0,10,size=(5,3)),columns=['a','b','c'])
df2=DataFrame(data=np.random.randint(0,10,size=(5,3)),columns=['a','d','c'])
df1
df2
pd.concat((df1,df2),axis=1)#horizon 级联
pd.concat((df1,df2),axis=0)#gradient 级联
# 内连接,去除NAN,只连接索引一致的项
pd.concat((df1,df2),axis=0,join='inner')
df1.append(df2)
df3=DataFrame(data=np.random.randint(0,10,size=(5,2)),columns=['a','b'])
df3
pd.concat((df1,df3),axis=1) #进行横向级联
pd.concat((df1,df3),axis=0) #进行纵向级联
是对数据的合并
级联就只是做拼接
级联可以拼接多张表,合并只能对两个表进行操作
df1=DataFrame({
'employee':['lucy','jack','lisa'],
'group':['a','b','c']
})
df2=DataFrame({
'employee':['lucy','jack','lisa'],
'age':[18,19,20]
})
df1
df2
pd.merge(df1,df2,on='employee')
# 不写on,会默认将两个表共有的列,进行合并
pd.merge(df1,df2)
pd.merge(df1,df2,on='age')
df3=pd.DataFrame({
'employee':['lucy','jack'],
'group':['a','b'],
'age':[18,19]
})
df3
df4=DataFrame({
'group':['a','b','b'],
'salary':[1000,2000,3000]
})
df4
pd.merge(df3,df4)
df5=pd.DataFrame({
'group':['b','b','c'],
'salary':[1000,2000,3000]
})
df5
df1=DataFrame({
'employee':['lucy','jack','lisa'],
'group':['a','b','b']
})
df1
pd.merge(df1,df5)# how默认为inner,不能合并的将被舍弃
pd.merge(df1,df5,how='outer')
左右合并
pd.merge(df1,df5,how='left')
pd.merge(df1,df5,how='right')
df1=pd.DataFrame({
'name':['lucy','jack','lisa'],
'group':['a','b','c'],
'age':[21,22,18],
})
df2=pd.DataFrame({
'employee':['lucy','bob','mike'],
'ages':[18,19,20],
})
df1
df2
# 没有共同索引的数据合并
pd.merge(df1,df2,left_on='name',right_on='employee')
将原始数据随机打乱(按列打乱)
随机抽样
分组聚合
读取数据库中的数据