pandas code 1

# -*- coding: utf-8 -*-

import cx_Oracle
import pandas as pd

connection = cx_Oracle.connect("***",
                               "***",
                               "14.29.*.*:11526/orcl",
                               encoding = "GBK",
                               nencoding = "GBK")

sql = '''
SELECT DISTINCT t1.vodid,
                t1.serviceid,
                t1.add_pack_plan_id,
                t1.add_pack_plan_name
FROM hsbi.sp_mk_product_content t1
LEFT JOIN iptv_app.test_add_pack_plan t2 ON t1.add_pack_plan_id=t2.add_pack_plan_id
WHERE t2.class_name1='影视'
  AND sp_name='南传'
'''

film_df = pd.read_sql(sql, connection)

# 类型转换
film_df.vodid = film_df.vodid.astype(object)

# 将数据存为 pickle
pickle_path = u'/datas/film.pkl'
data.to_pickle(pickle_path)

# 读取 pickle
film_df = pd.read_pickle(pickle_path)
print(film_df.dtypes)

filmdata = dict()
for _, row in film_df.iterrows():
    contend_id = str(row['vodid'])
    plan_name = str(row['add_pack_plan_name'])
    if filmdata.get(contend_id, -1) == -1:
        filmdata[contend_id]=set()
    filmdata[contend_id].add(plan_name)

# 按照字典的 value 的长度由大到小排列
sorted_filmdata = sorted(filmdata.items(), key=lambda film : len(film[1]), reverse=True)
outpath = u'/datas/film_result.data'

# 将结果写入文件
with open(outpath, 'a+', encoding='utf-8') as fout:
    for k, items in sorted_filmdata:
        if len(items) >= 2:
            print(k + ',' + ','.join(items), file=fout)

print("----------------process ends-------------------")

注意写入文件的代码

with open(outpath, 'a+', encoding='utf-8') as fout:
    for k, items in sorted_filmdata:
        if len(items) >= 2:
            print(k + ',' + ','.join(items), file=fout)

注意sorted 的用法

sorted_filmdata = sorted(filmdata.items(), key=lambda film : len(film[1]), reverse=True)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。