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中对列的操作”