Closed huhushengweimao closed 6 months ago
def set_datetime_format_frame(df, primary_key, pk_dtypes): """ 根据primary_key的rule为df的主键设置正确的时间日期类型
Parameters
----------
df: pd.DataFrame
需要操作的df
primary_key: list of str
主键列
pk_dtypes: list of str
主键数据类型,主要关注"date" 和"TimeStamp"
Returns
-------
None
Examples
--------
>>> df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
>>> df = set_primary_key_frame(df, ['a'], [int])
>>> df
a b
0 1 4
1 2 5
2 3 6
>>> set_primary_key_index(df, ['a'], ['int'])
>>> df
b
a
1 4
2 5
3 6
>>> set_datetime_format_frame(df, ['a'], ['date'])
>>> df
b
a
1970-01-01 00:00:00.000000001 4
1970-01-01 00:00:00.000000002 5
1970-01-01 00:00:00.000000003 6
"""
#这里有bug啊,分钟线不能用。。。。
# 设置正确的时间日期格式(找到pk_dtype中是否有"date"或"TimeStamp"类型,将相应的列设置为TimeStamp
'''
if ("date" in pk_dtypes) or ("TimeStamp" in pk_dtypes):
# 需要设置正确的时间日期格式:
# 有时候pk会包含多列,可能有多个时间日期,因此需要逐个设置
for pk_item, dtype in zip(primary_key, pk_dtypes):
if dtype in ['date', 'TimeStamp']:
df[pk_item] = pd.to_datetime(df[pk_item])
'''
if ("date" in pk_dtypes) or ("TimeStamp" in pk_dtypes) or ("datetime" in pk_dtypes):
# 需要设置正确的时间日期格式:
# 有时候pk会包含多列,可能有多个时间日期,因此需要逐个设置
for pk_item, dtype in zip(primary_key, pk_dtypes):
if dtype in ['date', 'TimeStamp','datetime']:
df[pk_item] = pd.to_datetime(df[pk_item])
这么修改下就好了
感谢您提供的信息,我确认一下
我把上面的代码修改成为:
if any(dtype in pk_dtypes for dtype in ['date', 'datetime', 'TimeStamp']):
# 需要设置正确的时间日期格式:
# 有时候pk会包含多列,可能有多个时间日期,因此需要逐个设置
for pk_item, dtype in zip(primary_key, pk_dtypes):
if dtype in ['date', 'TimeStamp', 'datetime']:
df[pk_item] = pd.to_datetime(df[pk_item])
return None
由于 unittest 没有覆盖到,因此没有抓住这个问题,感谢您的意见,我会更新test case,测试无误后在下一个版本中更新!
这个bug已经在最新版的qteasy中修复!请更新最新版本的qteasy并检验一下:
$ pip install qteasy -U
如果确认问题已经解决,请关闭此Issue,如果还有其他问题,请发起新的Issue,非常感谢!
Describe the bug / 描述bug内容
从本地读取分钟线数据会提示没有有属性,主要问题是读取的数据时间列进行转化为datetime格式的时候,没有加入 tradetime这种类型,只有date 和 timestamp