python的Int64类型转换为字符串类型日期、pandas实现DataFrame的合并

在我的Mongodb数据库中存有400W+数据,其中有一列是日期,我在当初把数据入库的时候没有注意,后面在读取的时候发现它是Int64类型(13位)时间戳的形式,这非常地影响可视化,要转换一下,把它变成字符串。

 注意:这里的datetime是我的列名,不是datetime库

df['datetime'] = df.datetime.apply(lambda x: time.strftime("%Y-%m-%d", time.localtime(x / 1000)))

转换后太方便阅读数据了  


我有两个数据库,一个是包含股票的【开,收,高,低,成交量,股票名,当天日期】

另一个是包含股票的【股票名,当天日期,流通股本】

现在的需求是将两个合并成一个,即当天日期对应的股票名匹配流通股本,没有则为空。

这里我们使用pandas的merge方法。

df3 = pd.merge(df1, df2, on=['key1', 'key2'], how='left')

# # 读取的时候把不读取id字段
# df1--->data   df2--->financial_data
df1 = pd.DataFrame(list(collection1.find({}, {"_id": 0})))
df1['datetime'] = df1.datetime.apply(lambda x: time.strftime("%Y-%m-%d", time.localtime(x / 1000)))
df2 = pd.DataFrame(list(collection2.find({}, {"_id": 0})))
print('------------开始合并------------------->')
# 合并
df3 = pd.merge(df1, df2, on=['code_name', 'datetime'], how='left')

因为设置了how='left',所以合并的表的数量等于表df1的数量(df1是主表)

如果没看明白合并,可以参考下以下B站up主的讲解

【【科研必备】使用pandas(python)进行数据合并—merge】


从mongodb读取两个表合并后再写入mongodb数据库的完整代码

import pymongo
import pandas as pd
import time
import json

pd.set_option('display.max_rows', None)
start_time = time.time()
# 建立服务器链接
client = pymongo.MongoClient("192.168.2.9", 27017)
print('正在连接数据库-----')
# 读取的数据库对象、插入的数据库对象
db = client['hold_on_security']
# 读取数据集合对象
collection1 = db['data']
collection2 = db['financial_data']
# 插入数据集合对象
insert_coll = db['merge_data']

# # 读取的时候把不读取id字段
# df1--->data   df2--->financial_data
df1 = pd.DataFrame(list(collection1.find({}, {"_id": 0})))
df1['datetime'] = df1.datetime.apply(lambda x: time.strftime("%Y-%m-%d", time.localtime(x / 1000)))
df2 = pd.DataFrame(list(collection2.find({}, {"_id": 0})))
print('------------开始合并------------------->')
# 合并
df3 = pd.merge(df1, df2, on=['code_name', 'datetime'], how='left')
# print(df3.info())
df_data = df3[['open', 'close', 'high', 'low', 'volume', 'code_name', 'datetime', 'circulating_cap']]
print('正在合并--------------------------')

# 插入数据集合
data = json.loads(df_data.T.to_json()).values()
print(data)
# 插入数据
result = insert_coll.insert_many(data)
time.sleep(1)
print('执行成功!!')
end_time = time.time()
print('程序运行时间------->', end_time - start_time)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值