python:数据分析数据处理小技巧

1、保持数据的原始类型


from numpy import dtype
pd.read_excel(filepath, dtype=dtype)
2、获取列名,并将列名赋值给没有表头的相同数据

df_data_list[1].columns=df_data_list[0].columns
df_data_list[2].columns=df_data_list[0].columns
df_data_list[3].columns=df_data_list[0].columns
3、相同dataframe拼接,向下拼接

df_cat=pd.concat([df_data_list[0],df_data_list[1],df_data_list[2],df_data_list[3]],axis=0)
4、对数据进行转加密MD5

import hashlib
# md5加密
def md5_string(in_str):
    md5 = hashlib.md5()
    md5.update(in_str.encode("utf8"))
    result = md5.hexdigest()
    return result

# 对某一列转编码
df_cat['A'] = df_cat['A'].astype('str')
df_cat['A']= df_cat['A'].apply(md5_string)

# 对某一值转编码
str1='123'
md5_string(str1)
5、isin获取数据

pre_df=df.loc[np.isin(days,'列表')]
6、拼接多个excel文件

import glob
xlsx_list = glob.glob('路径' + '*0.xls') #注意路径指的是拼接文件的路径,*是正则表达式
line = 0
for i in range(0, len(xlsx_list)):
    filepath = xlsx_list[i]
    df_data = pd.read_excel(filepath, dtype=dtype)
    # pd.read_csv('ddd.csv')
    print(filepath, df_data.shape[0])
    line += df_data.shape[0]
    if i == 0:
        df_data.to_csv('concat.csv', index=False, header=True, mode='a+')
    else:
        df_data.to_csv('concat.csv', index=False, header=False, mode='a+')
print(line)
7、生成以及保存多重字典的方法

# PycharmProjects/guangxi_data/getTags/getTags.py
cus_tags = {第一个key: {第二个key: "" for 第二个key in group_names} for 第一个key in cus_list}
# 赋值
cus_tags[第一个key][第二个key]=str(cus)
# 保存。先转成dataframe,再转置,直接保存成excel或者csv
df_tags=pd.DataFrame(cus_tags).T
df_tags.to_csv(save_path, index=False)
8、dict保存成csv的方法

def dict2csv(dict_name, file, column_names):
    with open(file, 'w', encoding='utf8') as f:
        f.write(f"{column_names[0]},{column_names[1]}\n")
        for k, v in dict_name.items():
            f.write(f"{k},{v}\n")

dict2csv(dict_name, '文件名.csv', ["列名1", "列名2", "列名3"])
9、python实现RFE进行特征选

"""
使用RFE进行特征选择:RFE是常见的特征选择方法,也叫递归特征消除。它的工作原理是递归删除特征,
并在剩余的特征上构建模型。它使用模型准确率来判断哪些特征(或特征组合)对预测结果贡献较大。
"""

from sklearn import datasets
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

testdataset = datasets.load_iris()
x = testdataset.data
y = testdataset.target

model = LogisticRegression()
rfe = RFE(model, 2)##rfe(estimator,n_features_to_select,step) estimator参数指明基模型,n_features_to_select指定最终要保留的特征数量,step为整数时设置每次要删除的特征数量,当小于1时,每次去除权重最小的特征。
rfe = rfe.fit(x, y)
print(rfe.support_)
print(rfe.ranking_)
10、将字符串数据转换成日期,获取日期
from datetime import datetime
import datetime as dt

def getCurYMDay(date):  # 把字符串转换成日期
    return datetime.strptime(date, "%Y%m%d%H%M%S").strftime('%Y%m%d')

# 将数据中的时间字符串转变成年月日形式的日期
dates=np.array([int(getCurYMDay(str(time))) for time in df['time']])  


# 传入一个时间,获取往前几个月前的日期。
pre_day=(datetime.strptime(cur_day,"%Y%m%d").date()-relativedelta(months=month_num)).strftime("%Y%m%d")

# 不需要传时间,当前时间往前推算几个月的时间
pre_day = (datetime.now().date() - relativedelta(months=month_num)).strftime("%Y%m%d")
11、npy文件转化以及索引赋值
import numpy as np
import pandas as pd

trans_matrix = np.load("result/trans_arr.npy",  allow_pickle=True)
trans_matrix = pd.DataFrame(data=trans_matrix)  # 将ndarray变成dataframe
product_id_cig = np.load("npys/idx_cig.npy", allow_pickle=True).item()  # 将字典形式的npy变成原始字典

index1 = trans_matrix.index  # 获取dataframe的索引
columns1 = trans_matrix.columns  # 获取dataframe的列名

index_list = index1.to_list()
columns_list = columns1.to_list()

# new_index = product_id_cig.values()
new_index_list = list(product_id_cig.values())
trans_matrix.index = new_index_list
trans_matrix.columns = new_index_list

trans_matrix.to_csv("trans_arr.csv",index=True, header=True)
 12、替换数据中某些字段的部分
gn = [g[:-3] if g.endswith('XXXX') or g.endswith('XXXX') else g for g in df['good_name']]
df['good_name'] = gn
13、获取数据文件的形式并读取数据
    if data_path.endswith(".csv"):
        df=pd.read_csv(data)
    elif data_path.endswith(".xls") or data_path.endswith(".xlsx"):
        df = pd.read_excel(data)
14、获取数据中的非空项 
def getCurYearMonth(date):
    return datetime.strptime(date, "%Y%m%d%H%M%S").strftime('%Y%m')
def formatTime(date):
    return datetime.strptime(date,"%Y-%m-%d %H:%M:%S").strftime("%Y%m%d%H%M%S")
def getCurYMDay(date):  # 把字符串转换成日期
    return datetime.strptime(date, "%Y%m%d%H%M%S").strftime('%Y%m%d')
def getCurMonth(date):  # 把字符串转换成日期
    return datetime.strptime(date, "%Y%m%d%H%M%S").strftime('%m')



df["certifyNumber"] = pd.to_numeric(df["certifyNumber"], errors='coerce')

#日期格式化
df['time']=[formatTime(time) for time in df['time']]


# 过滤金额小于0的
df = df.loc[df['money'] >=1, :]

# 过滤商品数量小于1的
df = df.loc[df['good_num'] >=1, :]

# 筛选userID称非空项,剔除异常值。
df = df.loc[~df['userID'].isnull(), :]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值