pyspark 众数填充空值

本文介绍了一种使用PySpark DataFrame在Python中进行探索性数据分析的方法,详细讲解了如何计算分类列的众数并填充缺失值,适用于大规模数据集的预处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://medium.com/@aieeshashafique/exploratory-data-analysis-using-pyspark-dataframe-in-python-bd55c02a2852

可用

def mode_of_pyspark_columns(sql_df, cat_col_list, verbose=False):
    col_with_mode=[]
    for col in cat_col_list:
        #Filter null  对原代码修正
        df = sql_df.filter(sql_df[col].isNull()==False)
        #Find unique_values_with_count
        unique_classes = df.select(col).distinct().rdd.map(lambda x: x[0]).collect()
        unique_values_with_count=[]
        for uc in unique_classes:
             unique_values_with_count.append([uc, df.filter(df[col]==uc).count()])
        #sort unique values w.r.t their count values
        sorted_unique_values_with_count= sorted(unique_values_with_count, key = lambda x: x[1], reverse =True)
        
        if (verbose==True): print(col, sorted_unique_values_with_count, " and mode is ", sorted_unique_values_with_count[0][0])
        col_with_mode.append([col, sorted_unique_values_with_count[0][0]])
    return col_with_mode

#Fill missing values for mode
from pyspark.sql.functions import when, lit

def fill_missing_with_mode(df, cat_col_list):
    col_with_mode =mode_of_pyspark_columns(df, cat_col_list)
    
    for col, mode in col_with_mode:
        df = df.withColumn(col, when(df[col].isNull()==True, 
        lit(mode)).otherwise(df[col]))
        
    return df

<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>803</width> <height>600</height> </rect> </property> <property name="windowTitle"> <string>天气情况分析</string> </property> <widget class="QWidget" name="centralwidget"> <widget class="QTabWidget" name="tabWidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>801</width> <height>551</height> </rect> </property> <property name="styleSheet"> <string notr="true">background-color: qlineargradient(spread:pad, x1:0.484346, y1:1, x2:0.479, y2:0, stop:0 rgba(158, 214, 255, 255), stop:1 rgba(255, 255, 255, 255));</string> </property> <property name="currentIndex"> <number>0</number> </property> <widget class="QWidget" name="tab"> <attribute name="title"> <string>数据预处理</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string>选择与清洗</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QPushButton" name="pushButton"> <property name="text"> <string>选择csv文件</string> </property> </widget> </item> <item> <widget class="QComboBox" name="comboBox"> <item> <property name="text"> <string>数值型列:使用KNNImputer填充缺失值</string> </property> </item> <item> <property name="text"> <string>非数值型列:使用该列的众数填充空值</string> </property> </item> <item> <property name="text"> <string>基于全部列删除重复项:使用drop_duplicates()方法删除所有重复的行</string> </property> </item> <item> <property name="text"> <string>异常值处理:使用IQR(四分位距)方法移除数据集数值型列中的异常值</string> </property> </item> <item> <property name="text"> <string>数据格式化和类型转换:对数值型列进行Min-Max归一化</string> </property> </item> <item> <property name="text"> <string>数据排序:根据索引排序</string> </property> </item> <item> <property name="text"> <string>数据存储:使用to_csv()方法将清洗后的数据存储到一个cleaned.csv文件中</string> </property> </item> </widget> </item> </layout> </widget> </item> <item> <widget class="QTableView" name="tableView"/> </item> </layout> </widget> <widget class="QWidget" name="tab_2"> <attribute name="title"> <string>可视化</string> </attribute> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QGroupBox" name="groupBox_2"> <property name="title"> <string>可视化选项</string> </property> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <widget class="QPushButton" name="pushButton_2"> <property name="text"> <string>温度、气压、湿度随时间变化的折线图</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_3"> <property name="text"> <string>不同站点PM2.5的柱状图</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_4"> <property name="text"> <string>累积降水量·的面积图</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_5"> <property name="text"> <string>各站点颗粒物浓度的散点图</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_6"> <property name="text"> <string>气象玫瑰图</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_7"> <property name="text"> <string>气象和污染物指标的雷达图</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_8"> <property name="text"> <string>箱线图展示数据分布</string> </property> </widget> </item> </layout> </widget> </item> <item> <widget class="QGraphicsView" name="graphicsView"/> </item> </layout> </widget> <widget class="QWidget" name="tab_3"> <attribute name="title"> <string>算法建模</string> </attribute> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QGroupBox" name="groupBox_3"> <property name="title"> <string>算法选项</string> </property> <layout class="QVBoxLayout" name="verticalLayout_4"> <item> <widget class="QPushButton" name="pushButton_9"> <property name="text"> <string>线性回归</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_10"> <property name="text"> <string>移动平均</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_11"> <property name="text"> <string>时间序列分解</string> </property> </widget> </item> <item> <widget class="QPushButton" name="pushButton_12"> <property name="text"> <string>经典时间序列预测模型</string> </property> </widget> </item> </layout> </widget> </item> <item> <widget class="QGraphicsView" name="graphicsView_2"/> </item> </layout> </widget> </widget> </widget> <widget class="QMenuBar" name="menubar"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>803</width> <height>33</height> </rect> </property> </widget> <widget class="QStatusBar" name="statusbar"/> </widget> <resources/> <connections/> </ui> 如果我要用网页实现上述ui文件的功能,怎么写python代码,已知要处理的cav文件有五万多行数据
最新发布
06-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值