python小知识积累---持续更新

  1. 整行为空进行剔除 result_df[null_lis].dropna(axis=0, how=‘all’)

  2. 将三列 年月日 重新组装成一个日期字段: pd.PeriodIndex(year=no_equal_df[“add_year”], month=no_equal_df[“end_month”], day=no_equal_df[“end_day”], freq=“D”).to_datetime()

或者:pd.to_datetime(
(no_equal_df[“now_year”] + 1).astype(str) + “-” + “12” + “-” + “31”).dt.date

  1. 将日期时间进行年月日切割:pd.DatetimeIndex(shanghai_df[“record_date”]).strftime("%Y%m")

4.笛卡尔积:pd.MultiIndex.from_product([name_lis, date_df.record_date.tolist()],
names=[‘product_name’, ‘report_date’]).to_frame(index=False)

另外一种直接用索引造:

df = pd.DataFrame()
df[“value”] =[“apple”,“hnhn”]
df[“date”] = [“2014”,“2015”,“2016”]
dyear_lis = [“2014”,“2015”,“2016”]
df[‘index’] = list(np.arange(df.shape[0]))
product_df = pd.DataFrame()
product_df[‘product_name’] = dyear_lis * df.shape[0]
product_df[‘index’] = list(np.arange(df.shape[0])) * len(dyear_lis)
pd.merge(df, product_df, on=[‘index’], how=‘inner’)

  1. 弹错 raise Exception(“错误的运行日期,应从” + run_date + “开始运行!”)

6.在对日期型数据多列求最大值时,类型不能为datetime,应为timestrip 型

7.1)去除打Dataframe字段字符串中 为空 或n个为空的 self.fund_code[~self.fund_code[“productName”].str.contains(r’^\s*$’)]
2)去除单个list中 多个空字符组成的空字符串:list(filter(lambda s: s and (type(s) != str or len(s.strip()) > 0), user_ids))

  1. np.nan != np.nan 需注意 取值时

9 去除list中为空的 字符:list(filter(None,list1))

10 在脚本中写的相对路径只能在本地运行,运行到项目时 需写绝对路径。
例如:DAZIGUAN_PATH = rf"{BASE_DIR}{os.sep}algo{os.sep}daziguan{os.sep}"

11: 对list 中的字符串按照长度排序 : replace_lst.sort(key=lambda x: -len(x))

12:多列排序: record_df.sort_values([‘topic’, ‘risk_type_score’, ‘event_score’], ascending=(1, 0, 0))

13:json.dumps() 无法解析 int32 类型数据 需将数据转换成 int64 result_df[“data_type”].astype(np.int64)

14: 判断时间 大于某个区间 pd.Timedelta(hours=2)

15: mysql 加密解密 :SELECT HEX(AES_ENCRYPT(front_ratio, ‘abc123’)) FROM py_etl_question_bank_financial_team_contrast;
– UPDATE py_etl_question_bank_financial_team_contrast set front_ratio=HEX(AES_ENCRYPT(front_ratio, ‘abc123’))
SELECT AES_DECRYPT(UNHEX(front_ratio), ‘abc123’) FROM py_etl_question_bank_financial_team_contrast;
python 中 hex_str = [“HEX(AES_ENCRYPT(’%s’, ‘%s’))” % (val, secret_key) for val in df[column]]
hex_str = "select " + ‘,’.join(hex_str)
val_df = select_sql(sql_str=hex_str, conn_dic=dic_name)

  1. 添加唯一索引:ALTER TABLE product_price_all_market_gather ADD unique(cp_id,product_object);
    删除唯一索引ALTER TABLE product_price_all_market_gather DROP INDEX cp_id_2

17.取两列的最大最小值横向 behavior_df[[“middle_ratio”, ‘middle_base’]].max(axis=1)

18 apply 多个参数 如何传参

19:对 部分列进行去重:rel_province_df.drop_duplicates([‘temp_id’, split_name])

20 :日期差值比较:

  1. 两个时间相加减
    fail_df[“now_tergger_time”] = pd.to_datetime(
    time.strftime(’%Y-%m-%d %H:%M:%S’, time.localtime(time.time())))
    fail_df[“diff_time”] = fail_df[“now_tergger_time”] - fail_df[“trigger_time”]
    value = pd.Timedelta(hours=2)
    fail_df[“diff_time”] > value
  2. 当前时间减去差值 时间进行比较
    now_time = pd.to_datetime(datetime.datetime.now() - datetime.timedelta(hours=2))
    valid_df = run_df[run_df[“trigger_time”] > now_time]

21: 更新某个字段的部分内容:UPDATE job_schadul_trigger_info SET executor_param = REPLACE(executor_param, ‘http://quality-pro.pystandard.py//’, ‘http://quality-pro.pystandard.py/’) where job_desc LIke “质控2019%” ;

你可能感兴趣的:(总结,python)