pandas dataframe rolling 移动计算

rolling()用法

rolling()方法主要用于移动运算,什么叫移动运算哪?最简单的理解就是,比如商品的销售来说,想知道A商品每7天每1个月的销售数量,这个时候用rolling()方法就可以轻松实现

df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

window: 向前计算的行数,如设置为3,则第一行为NaN+NaN+1 第二行为NaN+1+2 第三行为1+2+3
min_periods:最小的向前计算行数,默认为None,当window设置为3时,第一行数据向前查询时不满足3行,则值为设置为NaN,当设置为1时,就会抛弃不存在的行,只取第一行。
center: 把窗口的标签设置为居中。布尔型,默认False,居右
win_type: 窗口的类型。截取窗的各种函数。字符串类型,默认为None。各种类型
on: 可选参数。对于dataframe而言,指定计算后的对应列名,如果计算列为salenum,原有的数据列包含为goods,当on=goods时计算后的数据就为goods salenum两个列
axis: 0/1,默认为0,即对列进行计算
closed:定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。
 

以下代码截图来自Jupyter中文集成版(Python整合版)

Git地址:

https://github.com/DaiMaBang/Jupytericon-default.png?t=M1FBhttps://github.com/DaiMaBang/Jupyter计算巧克力每3天的销售数量,指定了on和计算列(系统默认会找数值列进行计算)

 通过agg方法,指定对应的列的计算方法

 求平均值

 

<think>好的,用户现在问的是“把df pandasDataFrame”,看起来可能想了解如何创建或操作pandasDataFrame。首先,我需要确认用户的具体需求。可能的情况包括: 1. 用户可能想将数据转换成DataFrame,比如从其他数据结构转换。 2. 可能遇到了错误,比如拼写错误,例如将“pandasDataFrame”连在一起,而没有空格,导致问题。 3. 用户可能不太清楚如何创建或操作DataFrame,需要基础指导。 接下来,回顾之前的对话历史。用户之前遇到了KeyError: 'date'的问题,我提供了详细的解决方案,包括检查列名、请求字段、异常处理等。现在的问题可能与DataFrame的操作有关,可能是用户在尝试创建或处理DataFrame时遇到了问题,或者是想了解基本操作。 现在需要分析当前查询的意图。用户输入的是“把df pandasDataFrame”,可能有两种情况: - 用户可能想表达“把df转换为pandas DataFrame”,但表达不完整或有拼写错误。 - 或者用户想了解如何操作DataFrame,比如创建、修改或保存。 首先,检查是否有拼写错误。正确的术语是“pandas DataFrame”,而用户可能误写为“pandasDataFrame”,中间缺少空格。这可能导致用户在实际代码中遇到问题,比如模块导入错误或者类名错误。 接下来,考虑用户可能的实际需求。如果用户想将某个数据转换为DataFrame,可能需要示例代码。或者用户可能在处理数据时遇到了问题,比如创建DataFrame失败,或者操作列时出错,比如之前的KeyError。 需要覆盖基础内容,确保用户了解如何创建DataFrame,常见的数据源如字典、列表、CSV文件等。同时,可能需要提醒常见的错误点,比如列名拼写、数据格式不一致等。 另外,结合之前的KeyError问题,用户可能在处理时间序列数据,需要确保日期列的正确处理,比如正确请求字段、转换日期格式等。因此,可能需要提供相关的示例,特别是与时间数据相关的DataFrame操作。 还可能要考虑用户是否在使用特定的数据源,比如baostock、Tushare等,这些库返回的数据结构可能需要特定的处理步骤,比如字段名的确认、数据转换等。因此,提供针对不同数据源的示例可能有帮助。 另外,用户可能需要了解如何查看DataFrame的结构,如使用head(), columns, dtypes等方法,以便调试和验证数据是否正确加载。这部分内容在之前的回复中已经提到过,可能需要再次强调。 此外,异常处理也是一个重点。用户可能在转换或创建DataFrame时遇到错误,比如数据类型不匹配、缺失值处理等,因此需要提供相应的错误处理建议,比如使用try-except块,或者数据清洗步骤。 最后,要确保回答结构清晰,分步骤说明,并提供代码示例,帮助用户逐步解决问题。同时,保持语言简洁,避免技术术语过多,适合不同水平的用户理解。</think>--- ### 一、DataFrame核心概念 **Pandas DataFrame** 是二维表格型数据结构,相当于Excel表格在内存中的数字化实现,包含以下关键特征: - 列名索引(columns) - 行索引(index) - 异构数据类型(每列类型可不同) - 缺失值自动处理(NaN表示) --- ### 二、创建DataFrame的5种方式 #### 1. 从字典创建(最常用) ```python data = { '股票代码': ['600000.SH', '000001.SZ', '600519.SH'], '日期': ['2023-08-21', '2023-08-22', '2023-08-23'], '收盘价': [7.85, 15.32, 1785.00] } df = pd.DataFrame(data) ``` #### 2. 从CSV文件加载 ```python df = pd.read_csv('stock_data.csv', parse_dates=['date'], # 自动转换日期列 dtype={'volume': 'int64'}) # 指定数据类型 ``` #### 3. 从API接口获取(以Tushare为例) ```python import tushare as ts pro = ts.pro_api('your_token') df = pro.daily(ts_code='600000.SH', start_date='20230101') ``` #### 4. 从数据库读取 ```python import sqlalchemy engine = sqlalchemy.create_engine('mysql://user:password@localhost/db') df = pd.read_sql('SELECT date, close FROM stock_prices', engine) ``` #### 5. 创建空DataFrame ```python df = pd.DataFrame(columns=['时间', '开盘价', '最高价', '最低价', '收盘价']) ``` --- ### 三、关键操作速查表 #### 1. 数据探查 | 操作 | 代码示例 | 输出说明 | |-----------------------|-----------------------------|-------------------------| | 查看前5行 | `df.head()` | 显示表格前5行数据 | | 查看列名 | `df.columns.tolist()` | 返回所有列名的列表 | | 显示数据类型 | `df.dtypes` | 每列的数据类型 | | 统计描述 | `df.describe()` | 数值型字段的统计指标 | #### 2. 数据选择 ```python # 选择单列(返回Series) close_prices = df['收盘价'] # 选择多列(返回DataFrame) subset = df[['日期', '收盘价']] # 条件筛选 aug_data = df[df['日期'].dt.month == 8] ``` #### 3. 数据处理 ```python # 新增计算列 df['涨跌幅'] = df['收盘价'].pct_change() * 100 # 重命名列 df = df.rename(columns={'date': '交易日期'}) # 处理缺失值 df.fillna(method='ffill', inplace=True) # 前向填充 ``` --- ### 四、实战案例:股票分析 #### 1. 计算移动平均线 ```python df['5日均线'] = df['收盘价'].rolling(window=5).mean() df['20日均线'] = df['收盘价'].rolling(window=20).mean() ``` #### 2. 数据可视化 ```python import matplotlib.pyplot as plt df.set_index('日期')['收盘价'].plot(figsize=(12,6), title='股价走势') plt.show() ``` #### 3. 保存处理结果 ```python # 保存到CSV df.to_csv('processed_stock_data.csv', index=False) # 保存到Excel df.to_excel('stock_analysis.xlsx', sheet_name='日线数据') ``` --- ### 五、常见错误处理 #### 1. KeyError解决方案 ```python if '收盘价' not in df.columns: print(f"可用列: {df.columns}") # 安全访问列数据 close = df.get('收盘价', pd.Series()) # 避免KeyError ``` #### 2. 数据类型转换 ```python df['成交量'] = df['成交量'].astype('int64') # 处理科学计数法问题 df['日期'] = pd.to_datetime(df['日期'], format='%Y%m%d') # 转换日期格式 ``` #### 3. 内存优化 ```python # 查看内存占用 print(df.memory_usage(deep=True)) # 优化数值列类型 df['price'] = pd.to_numeric(df['price'], downcast='float') ``` --- ### 六、高级技巧 #### 1. 多DataFrame合并 ```python # 纵向合并(相同结构数据) combined = pd.concat([df1, df2], ignore_index=True) # 横向连接(根据索引合并) merged = pd.merge(stock_data, index_data, on='日期', how='left') ``` #### 2. 时间序列处理 ```python df = df.set_index('日期') # 设置时间索引 monthly = df.resample('M').last() # 获取月末数据 ``` #### 3. 高性能操作 ```python # 使用Numpy加速计算 df['log_return'] = np.log(df['收盘价'] / df['收盘价'].shift(1)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值