学习笔记

pandas中对列的操作

import pandas as pd  # 将pandas作为第三方库导入,我们一般为pandas取一个别名叫做pd

pd.set_option('expand_frame_repr', False)  # 当列太多时显示完整

# =====导入数据
df=pd.read_excel('1.xlsx')

'''
df = pd.read_csv(
    # 该参数为数据在电脑中的路径,
    # 要注意字符串转义符号 \ ,可以使用加r变为raw string或者每一个进行\\转义
    filepath_or_buffer=r,
    # 编码格式,不同的文件有不同的编码方式,一般文件中有中文的,编码是gbk,默认是utf8
    # ** 大家不用去特意记住很多编码,我们常用的就是gbk和utf8,切换一下看一下程序不报错就好了
    encoding='gbk',
    nrows=15,
    # 该参数代表跳过数据文件的的第1行不读入
    skiprows=1,
    # 将指定列设置为index。若不指定,index默认为0, 1, 2, 3, 4...
    # index_col=['交易日期'],
)
'''

print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)
0     810  创维数字  25.21   1.941
1  600256  广汇能源  12.50   7.852
2    2444  巨星科技  27.02  -0.111
3    2416   爱施德  10.44  -0.287
4  601155  新城控股  21.51   4.114
5    2831  裕同科技  30.19   2.757
6    1914  招商积余  17.50   1.449
7  603979   金诚信  21.25   7.378
8    2372  伟星新材  20.72   5.445
9  600153  建发股份  11.48   2.226'''

print('------------列与行的加减乘除------------------')
'''
字符串列可以直接加上字符串
数字的列可以进行加减乘除
如果列与列之间都是数值,那么两个数值列之间也可以进行运算'''


print(df['股票简称']+' 09:30')
'''
0    创维数字 09:30
1    广汇能源 09:30
2    巨星科技 09:30
3     爱施德 09:30
4    新城控股 09:30
5    裕同科技 09:30
6    招商积余 09:30
7     金诚信 09:30
8    伟星新材 09:30
9    建发股份 09:30
Name: 股票简称, dtype: object'''


print('---')
print(df['现价(元)']*100)
'''
0    2521.0
1    1250.0
2    2702.0
3    1044.0
4    2151.0
5    3019.0
6    1750.0
7    2125.0
8    2072.0
9    1148.0'''


print('---')
#增加一个新列
df['新增一列']=1    #新增一个数值全为1的列
print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)  新增一列
0     810  创维数字  25.21   1.941     1
1  600256  广汇能源  12.50   7.852     1
2    2444  巨星科技  27.02  -0.111     1
3    2416   爱施德  10.44  -0.287     1
4  601155  新城控股  21.51   4.114     1
5    2831  裕同科技  30.19   2.757     1
6    1914  招商积余  17.50   1.449     1
7  603979   金诚信  21.25   7.378     1
8    2372  伟星新材  20.72   5.445     1
9  600153  建发股份  11.48   2.226     1'''

print('---')
#新增一列,内容由股票简称与现价组成
df['新增2列']=df['股票简称']+' 0:00'
print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)  新增一列       新增2列
0     810  创维数字  25.21   1.941     1  创维数字 0:00
1  600256  广汇能源  12.50   7.852     1  广汇能源 0:00
2    2444  巨星科技  27.02  -0.111     1  巨星科技 0:00
3    2416   爱施德  10.44  -0.287     1   爱施德 0:00
4  601155  新城控股  21.51   4.114     1  新城控股 0:00
5    2831  裕同科技  30.19   2.757     1  裕同科技 0:00
6    1914  招商积余  17.50   1.449     1  招商积余 0:00
7  603979   金诚信  21.25   7.378     1   金诚信 0:00
8    2372  伟星新材  20.72   5.445     1  伟星新材 0:00
9  600153  建发股份  11.48   2.226     1  建发股份 0:00'''


print('-------------------列的统计函数--------------------')
'''
默认对一整列进行操作,设置axis=1可以在一行中两个数据之间进行横向计算
.mean()             求均值,会返回一个数,会跳过空值
.max()          求最大值
.min()              求最小值
.std()          标准差
.count()        统计不包含空值的数据的数量
.median()     求中位数
.quntile(0.25)          25%分位数,排在第25%的数
.shift(-1)                   同一列中下一行的值   #正数的值是指定往前几行,负数是指定往后几行
.diff(1)    计算同一列中,这一行数值与上一行数值的差,指定的位置可以修改,同shift类似
def         可以删除指定的一列
.pct_change()         与diff相似,但计算的是两个数值之间相差的百分比
.value_counts()         统计该数值在一列中出现的次数

.drop()       删除行或列
https://www.cnblogs.com/mmmmiles/p/14591406.html
label参数是待删除的行名或列名,
axis值为1是横向,0是纵向
columns 待删除的列名
inplace,默认值是False,返回一个copy,也就是不对源数据进行操作,将处理结果作为一个返回值返回给一个新的变量,True则返回删除相应数据后的版本

.cumsum()   返回一列数据至此为止的累计总和
.cumprod()  返回一列数据至此为止相乘的积,可以用来集散资金曲线

.rank()         对一列数值进行排序,输出数值在一整列数据中的排名,
如果返回的结果是.5,则表示存在相同排名的数值
acsending参数与为True表示从小到大进行排序,反之从大到小
pct=False表示不按照百分比排序,True表示按百分比排序,输出的是0到1的值,1表示100%


'''
#求单列的均值
print(df['涨跌幅(%)'].mean())  #3.2764

#求多列的均值,注意有两个中括号
print(df[['涨跌幅(%)','现价(元)']].mean())
'''
涨跌幅(%)     3.2764
现价(元)     19.7820
dtype: float64'''


print('---')
'计算同一行中两个列的数值的均值,需要在.mean()中加入参数axis=1' \
'参数axis=1代表横向计算,不填写的情况下默认值为0'
print(df[['涨跌幅(%)','现价(元)']].mean(axis=1))
'''
0    13.5755
1    10.1760
2    13.4545
3     5.0765
4    12.8120
5    16.4735
6     9.4745
7    14.3140
8    13.0825
9     6.8530
dtype: float64'''



#.shift()
df['shift测试']=df['股票简称'].shift(-1)  #正数往前(上),负数往后(下)
print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)  新增一列       新增2列 shift测试
0     810  创维数字  25.21   1.941     1  创维数字 0:00    广汇能源
1  600256  广汇能源  12.50   7.852     1  广汇能源 0:00    巨星科技
2    2444  巨星科技  27.02  -0.111     1  巨星科技 0:00     爱施德
3    2416   爱施德  10.44  -0.287     1   爱施德 0:00    新城控股
4  601155  新城控股  21.51   4.114     1  新城控股 0:00    裕同科技
5    2831  裕同科技  30.19   2.757     1  裕同科技 0:00    招商积余
6    1914  招商积余  17.50   1.449     1  招商积余 0:00     金诚信
7  603979   金诚信  21.25   7.378     1   金诚信 0:00    伟星新材
8    2372  伟星新材  20.72   5.445     1  伟星新材 0:00    建发股份
9  600153  建发股份  11.48   2.226     1  建发股份 0:00     NaN'''


print('---')
#删除某一列数据
del df['新增一列']
print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)       新增2列 shift测试
0     810  创维数字  25.21   1.941  创维数字 0:00    广汇能源
1  600256  广汇能源  12.50   7.852  广汇能源 0:00    巨星科技
2    2444  巨星科技  27.02  -0.111  巨星科技 0:00     爱施德
3    2416   爱施德  10.44  -0.287   爱施德 0:00    新城控股
4  601155  新城控股  21.51   4.114  新城控股 0:00    裕同科技
5    2831  裕同科技  30.19   2.757  裕同科技 0:00    招商积余
6    1914  招商积余  17.50   1.449  招商积余 0:00     金诚信
7  603979   金诚信  21.25   7.378   金诚信 0:00    伟星新材
8    2372  伟星新材  20.72   5.445  伟星新材 0:00    建发股份
9  600153  建发股份  11.48   2.226  建发股份 0:00     NaN'''


print('---')
df['diff测试']=df['现价(元)'].diff(1)
print(df)
'''
     股票代码  股票简称  现价(元)  涨跌幅(%)       新增2列 shift测试  diff测试
0     810  创维数字  25.21   1.941  创维数字 0:00    广汇能源     NaN
1  600256  广汇能源  12.50   7.852  广汇能源 0:00    巨星科技  -12.71
2    2444  巨星科技  27.02  -0.111  巨星科技 0:00     爱施德   14.52
3    2416   爱施德  10.44  -0.287   爱施德 0:00    新城控股  -16.58
4  601155  新城控股  21.51   4.114  新城控股 0:00    裕同科技   11.07
5    2831  裕同科技  30.19   2.757  裕同科技 0:00    招商积余    8.68
6    1914  招商积余  17.50   1.449  招商积余 0:00     金诚信  -12.69
7  603979   金诚信  21.25   7.378   金诚信 0:00    伟星新材    3.75
8    2372  伟星新材  20.72   5.445  伟星新材 0:00    建发股份   -0.53
9  600153  建发股份  11.48   2.226  建发股份 0:00     NaN   -9.24'''


print('---')
print(df['现价(元)'].rank(ascending=True,pct=False))
'''
0     8.0
1     3.0
2     9.0
3     1.0
4     7.0
5    10.0
6     4.0
7     6.0
8     5.0
9     2.0'''
print('---')
print(df['现价(元)'].rank(ascending=True,pct=True))
'''
0    0.8
1    0.3
2    0.9
3    0.1
4    0.7
5    1.0
6    0.4
7    0.6
8    0.5
9    0.2'''

# =====列操作
# 行列加减乘除
# print(df['交易日期'] + ' 15:00:00')  # 字符串列可以直接加上字符串,对整列进行操作
# print(df['收盘价'] * 100)  # 数字列直接加上或者乘以数字,对整列进行操作。
# print(df[['收盘价', '成交量']])
# print(df['收盘价'] * df['成交量'])  # 两列之间可以直接操作。收盘价*成交量计算出的是什么?
# 新增一列
# df['交易日期2'] = df['交易日期'] + ' 00:00:00'
# df['交易所'] = '上交所'

# =====统计函数
# print(df['收盘价'].mean())  # 求一整列的均值,返回一个数。会自动排除空值。
# print(df[['收盘价', '成交量']].mean())  # 求两列的均值,返回两个数,Series
# print(df[['收盘价', '成交量']])
# print(df[['收盘价', '成交量']].mean(axis=1))  # 求两列的均值,返回DataFrame。axis=0或者1要搞清楚。
# axis=1,代表对整几列进行操作。axis=0(默认)代表对几行进行操作。实际中弄混很正常,到时候试一下就知道了。

# print(df['最高价'].max())  # 最大值
# print(df['最低价'].min())  # 最小值
# print(df['收盘价'].std())  # 标准差
# print(df['收盘价'].count())  # 非空的数据的数量
# print(df['收盘价'].median())  # 中位数
# print(df['收盘价'].quantile(0.25))  # 25%分位数
# 还有其他的函数计算其他的指标,在实际使用中遇到可以自己搜索


# =====shift类函数、删除列的方式
# df['下周期收盘价'] = df['收盘价'].shift(-1)  # 读取上一行的数据,若参数设定为3,就是读取上三行的数据;若参数设定为-1,就是读取下一行的数据;
# del df['下周期收盘价']  # 删除某一列的方法

# df['涨跌'] = df['收盘价'].diff(1)  # 求本行数据和上一行数据相减得到的值
# df.drop(['涨跌'], axis=1, inplace=True)  # 删除某一列的另外一种方式,inplace参数指是否替代原来的df
# df['涨跌幅'] = df['收盘价'].pct_change(1)  # 类似于diff,但是求的是两个数直接的比例,相当于求涨跌幅

# =====cum(cumulative)类函数
# df['累计成交量'] = df['成交量'].cumsum()  # 该列的累加值
# print(df[['交易日期', '成交量', '累计成交量','涨跌幅']])
# print((df['涨跌幅'] + 1.0).cumprod())  # 该列的累乘值,此处计算的就是资金曲线,假设初始1元钱。


# =====其他列函数
# df['收盘价_排名'] = df['收盘价'].rank(ascending=True, pct=False)  # 输出排名。ascending参数代表是顺序还是逆序。pct参数代表输出的是排名还是排名比例
# print(df[['收盘价', '收盘价_排名']])
# del df['收盘价_排名']
# print(df['收盘价'].value_counts())  # 计数。统计该列中每个元素出现的次数。返回的数据是Series

# =====文档
# 以上是我认为最常用的函数
# 哪里可以看到全部的函数?http://pandas.pydata.org/pandas-docs/stable/api.html

1 thought on “pandas中对列的操作”

发表回复