# 创建一个符合均匀分布的数据集(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())
pandas 教程,代码均在python3.7环境调试过,也有注释,部分有运行结果,比较大的结果集未列出
最新推荐文章于 2023-07-15 10:02:42 发布