• 量化交易系列【3】字符串与时间处理


    示例中使用的‘000001.XSHE.csv’文件,已上传至csdn资源中,可直接下载

    import pandas as pd
    
    • 1
    # 读取CSV文件
    df = pd.read_csv('./000001.XSHE.csv')
    df = df[:5]  # 取前5行数据
    df['code'] = '000001.XSHE'  # 添加股票代码列
    df
    
    • 1
    • 2
    • 3
    • 4
    • 5
    dateopenclosehighlowvolumemoneycode
    02015/1/59.9810.0010.179.744580990374.565388e+09000001.XSHE
    12015/1/69.909.8510.239.713469524963.453446e+09000001.XSHE
    22015/1/79.729.679.889.552722744012.634796e+09000001.XSHE
    32015/1/89.689.349.729.302254455022.128003e+09000001.XSHE
    42015/1/99.309.429.919.194017364193.835378e+09000001.XSHE

    字符串处理

    在df之后加上str,可以把数据变为字符串,然后就可以使用常见的字符串函数对整列进行操作

    # 取股票代码前6位
    df['code'].str[:6] 
    
    • 1
    • 2
    0    000001
    1    000001
    2    000001
    3    000001
    4    000001
    Name: code, dtype: object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 转换字母大小写:upper转大写,lower转小写
    df['code'].str.lower()
    
    • 1
    • 2
    0    000001.xshe
    1    000001.xshe
    2    000001.xshe
    3    000001.xshe
    4    000001.xshe
    Name: code, dtype: object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 计算字符串的长度,length
    df['code'].str.len()
    
    • 1
    • 2
    0    11
    1    11
    2    11
    3    11
    4    11
    Name: code, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    #  strip操作,把字符串两边的空格去掉
    df['code'].str.strip()
    
    • 1
    • 2
    0    000001.XSHE
    1    000001.XSHE
    2    000001.XSHE
    3    000001.XSHE
    4    000001.XSHE
    Name: code, dtype: object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    df['code'].str.strip()  # strip操作,把字符串两边的空格去掉
    df['code'].str.contains('sh')  # 判断字符串中是否包含某些特定字符
    df['code'].str.replace('sz', 'sh')  # 进行替换,将sz替换成sh
    
    • 1
    • 2
    • 3
    # split操作
    df['板块'] = '保险;金融'
    df
    
    • 1
    • 2
    • 3
    dateopenclosehighlowvolumemoneycode板块
    02015/1/59.9810.0010.179.744580990374.565388e+09000001.XSHE保险;金融
    12015/1/69.909.8510.239.713469524963.453446e+09000001.XSHE保险;金融
    22015/1/79.729.679.889.552722744012.634796e+09000001.XSHE保险;金融
    32015/1/89.689.349.729.302254455022.128003e+09000001.XSHE保险;金融
    42015/1/99.309.429.919.194017364193.835378e+09000001.XSHE保险;金融
    df['板块'].str.split(';')  # 对字符串进行分割
    
    • 1
    0    [保险, 金融]
    1    [保险, 金融]
    2    [保险, 金融]
    3    [保险, 金融]
    4    [保险, 金融]
    Name: 板块, dtype: object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    df['板块'].str.split(';').str[:1]  # 分割后取第一个值
    
    • 1
    0    [保险]
    1    [保险]
    2    [保险]
    3    [保险]
    4    [保险]
    Name: 板块, dtype: object
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    df['板块'].str.split(';', expand=True)  # expand=True分割后并且将数据分列
    
    • 1
    01
    0保险金融
    1保险金融
    2保险金融
    3保险金融
    4保险金融

    时间处理

    pd.to_datetime函数

    # pd.to_datetime函数:将交易日期由字符串改为时间变量
    df['date'] = pd.to_datetime(df['date'])  
    
    • 1
    • 2
    pd.to_datetime('1999/01/01 16:45')  
    
    • 1
    Timestamp('1999-01-01 16:45:00')
    
    • 1

    取日期相关数据

    df['date'].dt.year  # 输出这个日期的年份。相应的month是月份,day是天数,还有hour, minute, second
    
    df['date'].dt.week  # 这一天是一年当中的第几周
    
    df['date'].dt.dayofyear  # 这一天是一年当中的第几天
    
    df['date'].dt.dayofweek  # 这一天是这一周当中的第几天,0代表星期一
    
    df['date'].dt.weekday  # 和上面函数相同,更加常用
    
    df['date'].dt.weekday_name  # 和上面函数相同,返回的是星期几的英文,用于报表的制作。
    
    df['date'].dt.days_in_month  # 这一天是这一月当中的第几天
    
    df['date'].dt.is_month_end  # 这一天是否是该月的开头,是否存在is_month_end?
    
    df['date'] + pd.Timedelta(days=1)  # 增加一天,Timedelta用于表示时间差数据
    
    (df['date'] + pd.Timedelta(days=1)) - df['交易日期']  # 增加一天然后再减去今天的日期
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    第八章作业
    【小沐学NLP】关联规则分析Apriori算法(Mlxtend库,Python)
    2022年计算机专业毕业设计课题推荐
    C++20 Text formatting
    部署机器学习模型必须考虑的5个要素;用Python快速写web应用的框架;神经网络可视化;3D医学图像分割工具包;前沿论文 | ShowMeAI资讯日报
    Deformable Convolution 可变形卷积
    基于springboot信用分析管理系统设计与实现。
    Java实现一棵二叉树,并完成二叉树的层次遍历,两种中序遍历 递归 &非递归
    Visual Studio导入libtorch(Cuda版)
    【C++11】shared_ptr智能指针使用详解
  • 原文地址:https://blog.csdn.net/qq_42589613/article/details/127409355