暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python-61 pandas 数据表检查及清洗

Rhonin晴朗台风天 2021-10-01
791

 顺序:1生成数据表-2数据表检查-3数据表清洗-4数据表预处理-5数据提取-6数据筛选-7数据汇总-8数据统计-9数据输出

进度:完成1、9。



01



数据表检查


表格还是用上篇的表格Python-60 pandas之excel/csv/sql/spss读写

1、数据维度(行列):变量.shape

    data.shape
    Out[20]: (7, 5)

    2、查看数据表的整体信息包括数据维度,列名称,数据格式和所占空间等信息:变量.info()

      data.info()
      <class 'pandas.core.frame.DataFrame'>
      RangeIndex: 7 entries, 0 to 6
      Data columns (total 5 columns):
      # Column Non-Null Count Dtype
      --- ------ -------------- -----
      0 cno 7 non-null int64
      1 cname 7 non-null object
      2 cpno 5 non-null float64
      3 ccredit 7 non-null int64
      4 result 7 non-null object
      dtypes: float64(1), int64(2), object(2)
      memory usage: 408.0+ bytes

      3、数据格式:变量.dtypes,指定列变量['列名].dtypes

        data.dtypes
        Out[22]:
        cno int64
        cname object
        cpno float64
        ccredit int64
        result object
        dtype: object

        4、检验空值:变量.isnull(),指定列变量['列名].isnull()。检测非空值:变量.notna()

          data['cpno'].isnull()
          Out[23]:
          0 False
          1 True
          2 False
          3 False
          4 False
          5 True
          6 False
          Name: cpno, dtype: bool

          5、查看唯一值:变量['列名].unique(),限列。似与 Excel 中删除重复项后的结果

            data['ccredit'].unique()
            Out[25]: array([4, 2, 3], dtype=int64)

            6、查看数据表的值:变量.values

              data.values
              Out[26]:
              array([[1, '数据库', 5.0, 4, '对'],
              [2, '数学', nan, 2, '错'],
              [3, '信息系统', 1.0, 4, '对'],
              [4, '操作系统', 6.0, 3, '错'],
              [5, '数据结构', 7.0, 4, '对'],
              [6, '数据处理', nan, 2, '错'],
              [7, 'PASCAL语言', 6.0, 4, '错']], dtype=object)

              7、查看列名:变量.columns

                data.columns
                Out[27]: Index(['cno', 'cname', 'cpno', 'ccredit', 'result'], dtype='object')

                8、查看前 N 行:变量.head()

                  data.head(2)
                  Out[28]:
                  cno cname cpno ccredit result
                  0 1 数据库 5.0 4 对
                  1 2 数学 NaN 2 错

                  9、查看后 N 行:变量.tail()

                    data.tail(4)
                    Out[29]:
                    cno cname cpno ccredit result
                    3 4 操作系统 6.0 3 错
                    4 5 数据结构 7.0 4 对
                    5 6 数据处理 NaN 2 错
                    6 7 PASCAL语言 6.0 4 错

                    10、查看索引:变量.index

                      data.index
                      Out[30]: RangeIndex(start=0, stop=7, step=1)

                      11、数据转置:变量.T

                        data.T
                        Out[31]:
                        0 1 2 3 4 5 6
                        cno 1 2 3 4 5 6 7
                        cname 数据库 数学 信息系统 操作系统 数据结构 数据处理 PASCAL语言
                        cpno 5.0 NaN 1.0 6.0 7.0 NaN 6.0
                        ccredit 4 2 4 3 4 2 4
                        result 对 错 对 错 对 错 错


                        02


                        数据表清洗


                        主要内容包括对空值,大小写问题,数据格式和重复值的处理

                        一、处理空值
                        1、删除:变量.dropna( axis = 0 , how = 'any' , thresh = None , subset = None , inplace = False )

                        axis:0 或 'index' :删除包含缺失值的行。1 或 'columns' :删除包含缺失值的列

                        how:'any' :如果存在任何 NA 值,则删除该行或列。'all' :如果所有值都是 NA,则删除该行或列。

                        subset,列表,定义在哪些列中查找缺失值

                        thresh,只保留至少有 N个非 NA 值的行。

                          data.dropna(how="any")
                          Out[33]:
                          cno cname cpno ccredit result
                          0 1 数据库 5.0 4 对
                          2 3 信息系统 1.0 4 对
                          3 4 操作系统 6.0 3 错
                          4 5 数据结构 7.0 4 对
                          6 7 PASCAL语言 6.0 4 错

                          2、填充:变量.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

                          method:pad ffill:向后填充;backfill bfill:向前填充

                          limit:限制填充量

                            data.fillna(method="bfill")
                            Out[35]:
                            cno cname cpno ccredit result
                            0 1 数据库 5.0 4 对
                            1 2 数学 1.0 2 错
                            2 3 信息系统 1.0 4 对
                            3 4 操作系统 6.0 3 错
                            4 5 数据结构 7.0 4 对
                            5 6 数据处理 6.0 2 错
                            6 7 PASCAL语言 6.0 4 错


                            data.fillna(method="pad")
                            Out[36]:
                            cno cname cpno ccredit result
                            0 1 数据库 5.0 4 对
                            1 2 数学 5.0 2 错
                            2 3 信息系统 1.0 4 对
                            3 4 操作系统 6.0 3 错
                            4 5 数据结构 7.0 4 对
                            5 6 数据处理 7.0 2 错
                            6 7 PASCAL语言 6.0 4 错

                            二、大小写转换:变量["列名"]=变量["列名"].str.uper/lower()

                              data["cname"]=data["cname"].str.lower()


                              data
                              Out[99]:
                              cno cname cpno ccredit result
                              0 1 数据库 5.0 4 对
                              1 2 数学 NaN 2 错
                              2 3 信息系统 1.0 4 对
                              3 4 操作系统 6.0 3 错
                              4 5 数据结构 7.0 4 对
                              5 6 数据处理 NaN 2 错
                              6 7 pascal语言 6.0 4 错

                              三、更改数据格式:变量['列名']=变量['列名'].astype('string')

                                data['cno']
                                Out[101]:
                                0 1
                                1 2
                                2 3
                                3 4
                                4 5
                                5 6
                                6 7
                                Name: cno, dtype: int64


                                data['cno'].astype('string')
                                Out[103]:
                                0 1
                                1 2
                                2 3
                                3 4
                                4 5
                                5 6
                                6 7
                                Name: cno, dtype: string

                                四、更改列名:变量.rename(columns={'旧':'新'})

                                  data.rename(columns={'ccredit':'分数'})
                                  Out[104]:
                                  cno cname cpno 分数 result
                                  0 1 数据库 5.0 4 对
                                  1 2 数学 NaN 2 错
                                  2 3 信息系统 1.0 4 对
                                  3 4 操作系统 6.0 3 错
                                  4 5 数据结构 7.0 4 对
                                  5 6 数据处理 NaN 2 错
                                  6 7 pascal语言 6.0 4 错

                                  五、删除重复值:变量.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

                                  subset:列标签或标签序列,可选。仅考虑用于识别重复项的某些列,默认情况下使用所有列。

                                  keep:确定要保留哪些重复项(如果有)。- first: 除第一次出现外,删除重复项。- last: 除最后一次出现外,删除重复项。- False : 删除所有重复项

                                  inplace:是将重复项放置到位还是返回副本

                                    data
                                    Out[107]:
                                    cno cname cpno ccredit result
                                    0 1 数据库 5.0 4 对
                                    1 2 数学 NaN 2 错
                                    2 3 信息系统 1.0 4 对
                                    3 4 操作系统 6.0 3 错
                                    4 5 数据结构 7.0 4 对
                                    5 6 数据处理 NaN 2 错
                                    6 7 pascal语言 6.0 4 错


                                    data['ccredit']=data['ccredit'].drop_duplicates()


                                    data
                                    Out[109]:
                                    cno cname cpno ccredit result
                                    0 1 数据库 5.0 4.0 对
                                    1 2 数学 NaN 2.0 错
                                    2 3 信息系统 1.0 NaN 对
                                    3 4 操作系统 6.0 3.0 错
                                    4 5 数据结构 7.0 NaN 对
                                    5 6 数据处理 NaN NaN 错
                                    6 7 pascal语言 6.0 NaN 错


                                    data.drop_duplicates(subset=['ccredit'])
                                    Out[110]:
                                    cno cname cpno ccredit result
                                    0 1 数据库 5.0 4.0 对
                                    1 2 数学 NaN 2.0 错
                                    2 3 信息系统 1.0 NaN 对
                                    3 4 操作系统 6.0 3.0 错


                                    data
                                    Out[111]:
                                    cno cname cpno ccredit result
                                    0 1 数据库 5.0 4.0 对
                                    1 2 数学 NaN 2.0 错
                                    2 3 信息系统 1.0 NaN 对
                                    3 4 操作系统 6.0 3.0 错
                                    4 5 数据结构 7.0 NaN 对
                                    5 6 数据处理 NaN NaN 错
                                    6 7 pascal语言 6.0 NaN 错

                                    六、数值修改及替换:可用正则表达式进行模糊替换

                                    去除中间空格:变量["列名"]=变量["列名"].str.replace(' ','')

                                      data=pd.read_excel(r'C:\Users\Rhonin\Desktop\课程表.xlsx',dtype={"cname":"string"})
                                      data
                                      Out[95]:
                                      cno cname cpno ccredit result
                                      0 1 数据库 5.0 4 对
                                      1 2 数 学 NaN 2 错
                                      2 3 信息系统 1.0 4 对
                                      3 4 操作系统 6.0 3 错
                                      4 5 数据结构 7.0 4 对
                                      5 6 数据处理 NaN 2 错
                                      6 7 PASCAL语言 6.0 4 错


                                      data["cname"]=data["cname"].str.replace(' ','')
                                      data
                                      Out[97]:
                                      cno cname cpno ccredit result
                                      0 1 数据库 5.0 4 对
                                      1 2 数学 NaN 2 错
                                      2 3 信息系统 1.0 4 对
                                      3 4 操作系统 6.0 3 错
                                      4 5 数据结构 7.0 4 对
                                      5 6 数据处理 NaN 2 错
                                      6 7 PASCAL语言 6.0 4 错




                                      文章转载自Rhonin晴朗台风天,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论