您现在的位置是:网站首页> 编程资料编程资料
Python Pandas数据处理高频操作详解_python_
2023-05-26
381人已围观
简介 Python Pandas数据处理高频操作详解_python_
引入依赖
# 导入模块 import pymysql import pandas as pd import numpy as np import time # 数据库 from sqlalchemy import create_engine # 可视化 import matplotlib.pyplot as plt # 如果你的设备是配备Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代码有效提高图像画质 %config InlineBackend.figure_format = 'retina' # 解决 plt 中文显示的问题 mymac plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 设置显示中文 需要先安装字体 aistudio plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 import seaborn as sns # notebook渲染图片 %matplotlib inline import pyecharts # 忽略版本问题 import warnings warnings.filterwarnings("ignore") # 下载中文字体 !wget https://mydueros.cdn.bcebos.com/font/simhei.ttf # 将字体文件复制到 matplotlib'字体路径 !cp simhei.ttf /opt/conda/envs/python35-paddle120-env/Lib/python3,7/site-packages/matplotib/mpl-data/fonts. # 一般只需要将字体文件复制到系统字体田录下即可,但是在 studio上该路径没有写权限,所以此方法不能用 # !cp simhei. ttf /usr/share/fonts/ # 创建系统字体文件路径 !mkdir .fonts # 复制文件到该路径 !cp simhei.ttf .fonts/ !rm -rf .cache/matplotlib

算法相关依赖
# 数据归一化 from sklearn.preprocessing import MinMaxScaler # kmeans聚类 from sklearn.cluster import KMeans # DBSCAN聚类 from sklearn.cluster import DBSCAN # 线性回归算法 from sklearn.linear_model import LinearRegression # 逻辑回归算法 from sklearn.linear_model import LogisticRegression # 高斯贝叶斯 from sklearn.naive_bayes import GaussianNB # 划分训练/测试集 from sklearn.model_selection import train_test_split # 准确度报告 from sklearn import metrics # 矩阵报告和均方误差 from sklearn.metrics import classification_report, mean_squared_error
获取数据
from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/ry?charset=utf8') # 查询插入后相关表名及行数 result_query_sql = "use information_schema;" engine.execute(result_query_sql) result_query_sql = "SELECT table_name,table_rows FROM tables WHERE TABLE_NAME LIKE 'log%%' order by table_rows desc;" df_result = pd.read_sql(result_query_sql, engine) 
生成df
# list转df df_result = pd.DataFrame(pred,columns=['pred']) df_result['actual'] = test_target df_result # df取子df df_new = df_old[['col1','col2']] # dict生成df df_test = pd.DataFrame({'A':[0.587221, 0.135673, 0.135673, 0.135673, 0.135673], 'B':['a', 'b', 'c', 'd', 'e'], 'C':[1, 2, 3, 4, 5]}) # 指定列名 data = pd.DataFrame(dataset.data, columns=dataset.feature_names) # 使用numpy生成20个指定分布(如标准正态分布)的数 tem = np.random.normal(0, 1, 20) df3 = pd.DataFrame(tem) # 生成一个和df长度相同的随机数dataframe df1 = pd.DataFrame(pd.Series(np.random.randint(1, 10, 135))) 重命名列
# 重命名列 data_scaled = data_scaled.rename(columns={'本体油位': 'OILLV'}) 增加列
# df2df df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime']) # 新增一列根据salary将数据分为3组 bins = [0,5000, 20000, 50000] group_names = ['低', '中', '高'] df['categories'] = pd.cut(df['salary'], bins, labels=group_names)
缺失值处理
# 检查数据中是否含有任何缺失值 df.isnull().values.any() # 查看每列数据缺失值情况 df.isnull().sum() # 提取某列含有空值的行 df[df['日期'].isnull()] # 输出每列缺失值具体行数 for i in df.columns: if df[i].count() != len(df): row = df[i][df[i].isnull().values].index.tolist() print('列名:"{}", 第{}行位置有缺失值'.format(i,row)) # 众数填充 heart_df['Thal'].fillna(heart_df['Thal'].mode(dropna=True)[0], inplace=True) # 连续值列的空值用平均值填充 dfcolumns = heart_df_encoded.columns.values.tolist() for item in dfcolumns: if heart_df_encoded[item].dtype == 'float': heart_df_encoded[item].fillna(heart_df_encoded[item].median(), inplace=True)独热编码
df_encoded = pd.get_dummies(df_data)
替换值
# 按列值替换 num_encode = { 'AHD': {'No':0, "Yes":1}, } heart_df.replace(num_encode,inplace=True) 删除列
df_jj2.drop(['coll_time', 'polar', 'conn_type', 'phase', 'id', 'Unnamed: 0'],axis=1,inplace=True)
数据筛选
# 取第33行数据 df.iloc[32] # 某列以xxx字符串开头 df_jj2 = df_512.loc[df_512["transformer"].str.startswith('JJ2')] df_jj2yya = df_jj2.loc[df_jj2["变压器编号"]=='JJ2YYA'] # 提取第一列中不在第二列出现的数字 df['col1'][~df['col1'].isin(df['col2'])] # 查找两列值相等的行号 np.where(df.secondType == df.thirdType) # 包含字符串 results = df['grammer'].str.contains("Python") # 提取列名 df.columns # 查看某列唯一值(种类) df['education'].nunique() # 删除重复数据 df.drop_duplicates(inplace=True) # 某列等于某值 df[df.col_name==0.587221] # df.col_name==0.587221 各行判断结果返回值(True/False) # 查看某列唯一值及计数 df_jj2["变压器编号"].value_counts() # 时间段筛选 df_jj2yyb_0501_0701 = df_jj2yyb[(df_jj2yyb['r_time'] >=pd.to_datetime('20200501')) & (df_jj2yyb['r_time'] <= pd.to_datetime('20200701'))] # 数值筛选 df[(df['popularity'] > 3) & (df['popularity'] < 7)] # 某列字符串截取 df['Time'].str[0:8] # 随机取num行 ins_1 = df.sample(n=num) # 数据去重 df.drop_duplicates(['grammer']) # 按某列排序(降序) df.sort_values("popularity",inplace=True, ascending=False) # 取某列最大值所在行 df[df['popularity'] == df['popularity'].max()] # 取某列最大num行 df.nlargest(num,'col_name') # 最大num列画横向柱形图 df.nlargest(10).plot(kind='barh') 
差值计算
# axis=0或index表示上下移动, periods表示移动的次数,为正时向下移,为负时向上移动。 print(df.diff( periods=1, axis=‘index‘)) print(df.diff( periods=-1, axis=0)) # axis=1或columns表示左右移动,periods表示移动的次数,为正时向右移,为负时向左移动。 print(df.diff( periods=1, axis=‘columns‘)) print(df.diff( periods=-1, axis=1)) # 变化率计算 data['收盘价(元)'].pct_change() # 以5个数据作为一个数据滑动窗口,在这个5个数据上取均值 df['收盘价(元)'].rolling(5).mean()
数据修改
# 删除最后一行 df = df.drop(labels=df.shape[0]-1) # 添加一行数据['Perl',6.6] row = {'grammer':'Perl','popularity':6.6} df = df.append(row,ignore_index=True) # 某列小数转百分数 df.style.format({'data': '{0:.2%}'.format}) # 反转行 df.iloc[::-1, :] # 以两列制作数据透视 pd.pivot_table(df,values=["salary","score"],index="positionId") # 同时对两列进行计算 df[["salary","score"]].agg([np.sum,np.mean,np.min]) # 对不同列执行不同的计算 df.agg({"salary":np.sum,"score":np.mean}) 时间格式转换
# 时间戳转时间字符串 df_jj2['cTime'] =df_jj2['coll_time'].apply(lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x))) # 时间字符串转时间格式 df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime']) # 时间格式转时间戳 dtime = pd.to_datetime(df_jj2yyb['r_time']) v = (dtime.values - np.datetime64('1970-01-01T08:00:00Z')) / np.timedelta64(1, 'ms') df_jj2yyb['timestamp'] = v 设置索引列
df_jj2yyb_small_noise
相关内容
- Python办公自动化从Excel中计算整理数据并写入Word_python_
- Pytorch中使用TensorBoard详情_python_
- Python办公自动化Word转Excel文件批量处理_python_
- Pandas Matplotlib保存图形时坐标轴标签太长导致显示不全问题的解决_python_
- python的自变量选择(所有子集回归,后退法,逐步回归)_python_
- python画图中文不显示问题的解决方法_python_
- Django配合python进行requests请求的问题及解决方法_python_
- Python Opencv中获取卷积核的实现代码_python_
- Python中True(真)和False(假)判断详解_python_
- 详解Python中元组的三个不常用特性_python_
点击排行
本栏推荐
