pandas 教程,代码均在python3.7环境调试过,也有注释,部分有运行结果,比较大的结果集未列出

# 创建一个符合均匀分布的数据集(634,7)
# https://www.cnblogs.com/luminous-Xin/p/14863794.html

import numpy as np
import pandas as pd

# 生成数据
data = np.random.uniform(-20,20, (634,7)) # 模拟生成股票涨跌数据

# 生成行索引
date = pd.date_range(start="20210601", periods=634, freq="B")
# 生成列索引
stock_name = ["open","high","close","low","volume","price_change","p_change"]
# 将数据加载到DataFrame中,并加上行列索引
data = pd.DataFrame(data, index = date, columns=stock_name)
print("data:",data)
# 直接使用行列索引(先列后行)
# 注意先列后行
data["close"]["2021-06-04"]    #获取‘2021-06-04’这天的close的结果!!!!,注意写法直接是data!!!
# output
#  -1.0426990669399316
# 结合loc或者iloc使用索引
# 二者输出结果相同
data.loc["2021-06-04"]["close"] #类似二维数table的写法loc[][] 两个中括号。
data.loc["2021-06-04","close"]  #类似二维数table的写法loc[a,b] 只有一个中括号!!!!!。
# output
#  -1.0426990669399316
# 使用iloc可直接使用数字索引
data.iloc[3,2] #这是用iloc的写法,都是用的数字索引!!!!
# output
#  -1.0426990669399316
# 组合索引
# data.ix[:4,["open", "close", "high", "low"]]  # ix[] 这种写法 以后不支持了。  现在3.7已经不支持了,只能注释掉了。
# 但是我们仍有办法使用组合索引:可用以下方法替代ix上述方法:
# 使用loc来使用组合索引
data.loc[data.index[0:4],["open", "close", "high", "low"]]
print('data.loc[data.index[0:4],["open", "close", "high", "low"]]',data.loc[data.index[0:4],["open", "close", "high", "low"]]) #返回的类似二维数组
# 使用iloc来使用组合索引
data.iloc[:4,data.columns.get_indexer(["open", "close", "high", "low"])]
print('data.iloc[:4,data.columns.get_indexer(["open", "close", "high", "low"])]:',data.iloc[:4,data.columns.get_indexer(["open", "close", "high", "low"])]) #返回的类似二维数组
# 结果都和 ix上述方法结果一致
# 二、赋值与排序
# 赋值
# 例如:对DataFrame中的close列重新赋值为1

# 直接修改原来的值
new_data1 = data
print('data.head(5):',data.head(5).head(5))  # 查看前5行
print('new_data1.head(5):',new_data1.head(5).head(5)) #查看前5行
new_data1["close"] = 1 # 这种写法也
print('执行完:new_data["close"] = 1之后,new_data1:',new_data1.head(5))
# 或者 第二种方法:
new_data2 = data
new_data2.close = 1 # 这种写法也很怪!!!!!
print('执行完:new_data2.close = 1怪异的写法之后的 new_data2.head(5):',new_data2.head(5))
# new_data1.head(5)
# new_data2.head(5)
# 排序:
# 按 p_change进行排序
data = data.sort_values(by="p_change", ascending=True)
# 先按 high 进行排序, 再按 p_change进行排序
data = data.sort_values(by=["high","p_change"])
# 使用sort_index进行排序,按照日期索引从大到小排序,或从小到大排序
data = data.sort_index()
# Series
# 使用series.sort_values(ascending=True) 对内容进行排序
# series排序时,只有一列,不需要参数
data["p_change"].sort_values(ascending=True).head(5)
# 2022-10-20   -19.919984
# 2022-05-11   -19.919346
# 2023-02-06   -19.912896
# 2021-07-21   -19.886578
# 2021-09-07   -19.876232
# Name: p_change, dtype: float64

# 使用series.sort_index() 对索引进行排序
data["p_change"].sort_index().head(5)

# 2021-06-01    16.871168
# 2021-06-02     8.089420
# 2021-06-03   -10.253883
# 2021-06-04    -3.903694
# 2021-06-07    16.020016
# Name: p_change, dtype: float64
print(data.head(5))
data.add(10)
print('after data.add(10):',data.head(5))

tk = pd.Series(np.ones(10))
print('tk:',tk)
tk=tk.add(10)
print('after tk.add(10) to tk:',tk)
tk2=tk.add(10)
print('after tk.add(10) to tk2:',tk2)

df = pd.DataFrame({'angles': [0, 3, 4],
                    'degrees': [360, 180, 360]},
                   index=['circle', 'triangle', 'rectangle'])
df + 1 # df所有值都+1,但是并不保存为df,应该是生成了一个新的类似df的对象?
df2=df + 1  # # df所有值都+1,但是并保存为df2,应该是生成了一个新的类似df2的对象.
print('df+1:df:',df2)  ## df所有值都+1,但是并保存为df2,应该是生成了一个新的类似df2的对象.
#            angles  degrees
# circle          1      361
# triangle        4      181
# rectangle       5      361
df.add(1)     # df所有值都+1,但是并不保存为df,应该是生成了一个新的类似df的对象?
df3=df.add(1)   #  df所有值都+1,但是并保存为df3,应该是生成了一个新的类似df3的对象.
print('df.add(1):',df3) #  df所有值都+1,但是并保存为df3,应该是生成了一个新的类似df3的对象.
print('------------')
print('print(df+1):',df+1)  # df所有值都+1,但是并不保存为df,应该是生成了一个新的类似df的对象?
print('originaldata.head():',data.head())
myclose = data.close #针对列进行数据修改,都是带索引的
print('myclose:',myclose)
myopen = data.open #针对列进行数据修改。都是带索引的
print('myopen:',myopen)
#    2. 收盘价减去开盘价
data['m_price_change11'] = myclose.sub(myopen) #针对列进行数据修改。都是带索引的
print('mydata.head():',data.head())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值