八、其他知识点

1 布林指标:

      布林线(Boll)指标是股市技术分析的常用工具之一,通过计算股价的“标准差”,再求股价的“信赖区间”。该指标在图形上画出三条线,其中上下两条线可以分别看成是股价的压力线和支撑线,而在两条线之间还有一条股价平均线,布林线指标的参数最好设为20。一般来说,股价会运行在压力线和支撑线所形成的通道中。

### 第一步:计算布林指标 ###

#第一步:计算MA
N = 20 #布林线指标的参数最好设为20
MA = data['收盘价(元)'].sum()/N
#第二步:计算标准差MD
MD = data['收盘价(元)'].rolling(N).std() 
#第三步:计算MB、UP、DN线
MB = data['收盘价(元)'].rolling(N).mean()
K = 2  # K为参数,可根据股票的特性来做相应的调整,一般默认为2
UP = MB + K * MD
DN = MB - K * MD

 

### 计算布林线并绘制 ###

font = {'family':'MicroSoft YaHei', 'weight':'bold', 'size': 12}
matplotlib.rc('font', **font)
plt.rc('figure', figsize=(16,6), dpi=150) #设置图的大小

#设置x,y轴标签
plt.xlabel("日期")
plt.ylabel("价钱(元)")
plt.title("每日开盘收盘趋势图")

#绘制网格
plt.grid(alpha=0.4, linestyle='--')#alpha表示透明度

#绘制布林线(中轨线、上轨线、下轨线)
plt.plot(data['收盘价(元)'], label='收盘价(元)')
plt.plot(UP, label='上轨线UP')
plt.plot(MB, label='中轨线MB')
plt.plot(DN, label='下轨线DN')

plt.legend(loc='upper right')
plt.show()

 

 

2 双冒号作用:

'''
Python序列切片地址可以写为[开始:结束:步长],其中的开始和结束可以省略;
range(n)生成[0,n)区间整数;
开始start省略时,默认从第0项开始;
结尾省略的时候,默认到数组最后;
开始和结尾不省略的时候([2:6:]), step省略默认为1;
步长step=n;代表从start开始(start也算)每隔step间隔,取一个数,一直到结尾end; [::3]
'''

# 当step等于负数的时候,从右向左取数。例:
range(10)[::-1] # [9,8,7,6,5,4,3,2,1,0]
range(10)[::-2] # [9,7,5,3,1]


# 参考资料:https://blog.csdn.net/u011771047/article/details/52259401

3 中括号和双中括号:

当我们使用pandas中的groupby进行分组聚合时,若对需要聚合的单列使用双中括号,则输出时会带有列标签;
若对需要聚合的单列使用单中括号,则输出时不会带有列标签,末尾会单独输出一行属性列;
若需要将多列进行聚合时,单中括号和双中括号没有区别;
参考资料:https://blog.csdn.net/li578023/article/details/76116581

4 设置数字格式,小数位数、百分号、千位分隔符:

(1)设置小数位数:

# 方法一:使用round()函数
df.round(decimals=3)

# 方法二:使用自定义函数 + %.2f
df['data'].map(lambda x : ('%.2f')%x)
# 但是经过自定义函数处理过后的数据已经不再是float。如需后续计算的话需要先做变换;、

# 方法三:
df['data'].map(lambda x : format(x, '.2f'))

(2)设置百分数:

# 自定义函数+格式化处理
df['data'].map(lambda x : format(x, '.2%'))

# 这里利用自定义函数将每个数字进行format格式处理,处理后数据从float格式转换成了带2位小数和百分号的对象;

(3)设置千位分隔符:自定义函数+格式化处理

df['data'].map(lambda x : format(x, ','))

# 处理后依然是对象格式。设置千位分割符请小心操作,因为对电脑来说,这些已经不再是数字了,而是数字和逗号组成的字符串,要再变成数值型就麻烦了。

5 Pandas提取含有指定字符串的行或列:

(1)完全匹配:==

(2)部分匹配:

str.contains():包含一个特定的字符串
   参数na:缺少值NaN处理
   参数case:大小写的处理
   参数regex:使用正则表达式模式

str.endswith():以特定字符串结尾
str.startswith():以特定的字符串开头
str.match():匹配正则表达式模式

注:要提取部分匹配的行,可以使用pandas的(str.xxx())方法,根据指定条件提取的字符串方法

6 agg()函数:

聚合函数,对分组后数据进行聚合,默认情况对分组后其他列进行聚合。

# DataFrame.agg(func,axis = 0,* args,** kwargs )

# 例:
# 1.使用agg求出当前数据对应的统计量
df[['salary', 'score']].agg([np.sum])

# 2.使用agg分别求字段的不同统计量
df.agg({'salary' : np.sum, 'score' : np.mean})

# 3.使用agg方法求不同字段的不同数目统计量
df.agg({'salary' : np.sum, 'score' : [np.sum, np.mean]})

# 4.在agg方法中使用自定义函数
df.agg({'salary' : 自定义函数}, axis=0)

7 tsv 和 csv文件:

TSV文件和CSV的文件的区别是:前者使用\t作为分隔符,后者使用,作为分隔符。

data = pd.read_csv('test.tsv', sep='\t')

# 如果已有表头,则可使用header参数:
data = pd.read_csv('test.tsv', sep='\t', header=0)

# 如果已有主键列:
data = pd.read_csv('test.tsv', sep='\t', header=0, index_col='id')

8 nunique()和unique()函数区别:

'''
pandas 之unique()函数与nunique()函数区别:
(1)unique()是以数组形式(numpy.ndarray)返回所选列的所有唯一值(特征的所有唯一值):
(2)nunique() 返回的是唯一值的个数;
'''

df['item_name'].nunique()
# 等同于:
len(len(df['item_name'].unique()))

9 pd.read_csv()||pd.to_csv()索引问题index:

# to_csv()存储时不加索引
df.to_csv(path, index= False, header= False)

# read_csv()读取时声明第一列是索引,第一行是索引
df = pd.read_csv(path, index_col= 0, header= 0)

#  header = 0 # 源文件第一行作为读取后的列索引
#  header = None # 源文件没有列索引,自动为其添加
#  index_col = None # 源文件没有行索引,自动为其添加,把原来其自己的行索引视为新的一列
#  index_col = 0 # 指定源文件第一列作为行索引

10 Pandas数据合并与拼接的总结:

(1)DataFrame.concat:沿着一条轴,将多个对象堆叠到一起

concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)

# 参数:
# objs: series,dataframe或者是panel构成的序列lsit
# axis:需要合并链接的轴,0是行,1是列
# join:连接的方式 inner,或者outer

pd.concat()只是单纯的把两个表拼接在一起,参数axis是关键,它用于指定合并的轴是行还是列,axis默认是0。

(2)DataFrame.merge:类似 vlookup

df = pd.merge(left, right, how = "inner",on = "None")

'''
参数:
    left: 左表。也就是第一个df。
    right:右表。也就是第二个df。
    how: 和concat里面的"join"类似,表示“如何合并两表。
        1)left: 只使用左表的键。
        2)right:只使用右表的键。
        3)inner: 使用左右表键的交集。
        4)outer:使用左右表键的并集。
    on: 表示按照哪一个键来进行合并。
'''

类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

(3)DataFrame.join:主要用于索引上的合并

join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False)

其参数的意义与merge方法中的参数意义基本一样。该方法最为简单,主要用于索引上的合并。

(4)Series.append()/DataFrame.append()

# Series.append:纵向追加Series
Series.append(self, to_append, ignore_index=False, verify_integrity=False)

# DataFrame.append:纵向追加DataFrame
DataFrame.append(self, other, ignore_index=False, verify_integrity=False, sort=False)

(5)总结:

join 最简单,主要用于基于索引的横向合并拼接
merge 最常用,主要用于基于指定列的横向合并拼接
concat最强大,可用于横向和纵向合并拼接
append,主要用于纵向追加

11 正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符

\f -> 匹配一个换页
\n -> 匹配一个换行符
\r -> 匹配一个回车符
\t -> 匹配一个制表符
\v -> 匹配一个垂直制表符
\s+ -> 则表示匹配任意多个上面的字符, 可以将tab和多个空格都当成一样的分隔符

12 df.query()  使用布尔表达式查询帧的列

df.query(expr,inplace = False,** kwargs)

'''
参数:
    expr:str要评估的查询字符串。你可以在环境中引用变量,在它们前面添加一个'@'字符 。@a + b
    inplace=False:是否修改数据或返回副本
    kwargs:dict关键字参数
'''

13 pandas创建新的数据列:

(1)直接赋值

(2)df.apply方法

# 实例:添加一列温度类型:
# 1 如果最高温度大于33度就是高温
# 2 如果最低温度低于-10度就是低温
# 3 否则就是常温

(3)df.assign方法

可以同时添加多个新的列

(4)按条件选择分组分别赋值

按条件选择数据,然后随这部分数据赋值新列

14 查看每个列的数据类型:

(1)type()

type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象

(2)DataFrame.dtypes

返回DataFrame中的dtypes,这将返回一个Series,其中包含每列的数据类型。结果的索引是原始DataFrame的列。具有混合类型的列与objectdtype 一起存储。

15 reshape函数:频率转换和重新采样时间的便捷方法

对象必须具有类似日期时间的索引(DatetimeIndex,PeriodIndex或TimedeltaIndex)

df.resample(rule,how=None,axis=0,fill_method=None,closed=None,label=None,convention=start, kind=None, loffset=None,limit=None, base=0, on=None, level=None)
# rule:“M”,“A”,“Q”,“BM”,“BA”,“BQ”,和“W”

(1)频率转换:

s.resample('3S').asfreq()

(2)上采样Upsample:

s.resample('30S').asfreq()[0:5]
s.resample('30S').pad()[0:5] #用前面值填充后面Na
s.resample('30S').bfill()[0:5]#用后面值填充前面Na

(3)下采样:

s.resample('2min').asfreq()
# 对于下采样,closed可以设置为“左”或“右”以指定间隔的哪一端关闭:
s.resample('5Min', closed='left').sum()
s.resample('5Min', closed='right').sum()

(4)参数:label和loffset

参数label和loffset用于处理结果标签。label指定结果是使用间隔的开头还是结尾标记。loffset对输出标签执行时间调整。

s.resample('5Min').sum()
s.resample('5Min',label='left').sum()
s.resample('5Min',label='left',loffset='1s').sum()

参数:label和closed

ts2.resample('M',label='right', closed='left').max() #label='right'索引为本月的最后一日即1月31日

(5)axis/kind参数:

axis=0或1允许您重新采样指定;kind='timestamp'或'period',将结果索引转换为时间戳/时间范围表示。默认保留输入

重采样对象方法:sum,mean,std,sem, max,min,median,first,last,ohlc,apply传递自定义函数,agg函数

 

你可能感兴趣的:(Pandas知识点总结,python,pandas)