예제 #1
0
        public static void NAProcess(DataGridView dataGridView1, string Cols, string type, RichTextBox richTextBox1, ComboBox comboBox_user_defined, TextBox textBox_user_defined)
        {
            char []    separator      = { ',' };
            string []  AllCols        = Cols.Split(separator);
            List <int> ColsNeedRemove = new List <int>();
            int        NACount        = 0;
            //计算缺失值数量
            DataTable dt = dataGridView1.DataSource as DataTable;

            richTextBox1.AppendText("缺失值处理:\r\n");
            richTextBox1.AppendText("    处理方式: " + type + "\r\n");
            richTextBox1.Select();                           //让RichTextBox获得焦点
            richTextBox1.Select(richTextBox1.TextLength, 0); //将插入符号置于文本结束处
            richTextBox1.ScrollToCaret();
            BigNumber Mean = 0;
            BigNumber Sum  = 0;

            foreach (string Col in AllCols)
            {
                int StartCount = 0;
                //从第一个非空值开始计数
                NACount = 0;
                Sum     = 0;
                if (comboBox_user_defined.Text == "平均值")
                {
                    string [] Numbers   = Tabulation.ReadVector(MainForm.MainDT, Convert.ToInt32(Col) - 1).ToArray();
                    int       NumCounts = 0;
                    foreach (string Num in Numbers)
                    {
                        if (Tabulation.IsStrDouble(Num))
                        {
                            Sum += Convert.ToDouble(Num);
                            NumCounts++;
                        }
                    }
                    Mean = Sum / NumCounts;
                }
                for (int i = dataGridView1.Rows.Count - 2; i >= 0; i--)
                {
                    //倒着数,从后往前数
                    if (StartCount == 0 && dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value.ToString().Trim() != "")
                    {
                        StartCount = 1;
                        continue;
                    }
                    if (StartCount == 1 && dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value.ToString().Trim() == "")
                    {
                        //遇到缺失值了
                        if (type == "计算缺失值个数")
                        {
                            NACount++;
                        }
                        else if (type == "删除整行")
                        {
                            NACount++;
                            //dt.Rows.RemoveAt(i);
                            ColsNeedRemove.Add(i);
                        }
                        else if (type == "替换为特定值")
                        {
                            if (comboBox_user_defined.Text == "平均值")
                            {
                                dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value = Mean.ToString();
                            }
                            else if (comboBox_user_defined.Text == "自定义值")
                            {
                                dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value = textBox_user_defined.Text;
                            }
                            NACount++;
                        }
                    }
                }

                if (StartCount != 0)
                {
                    richTextBox1.AppendText("    " + "第" + Col + "列" + "缺失值个数: " + NACount.ToString() + "\r\n");
                    richTextBox1.Select();                           //让RichTextBox获得焦点
                    richTextBox1.Select(richTextBox1.TextLength, 0); //将插入符号置于文本结束处
                    richTextBox1.ScrollToCaret();
                }
            }
            richTextBox1.AppendText("\r\n");
            if (type == "删除整行")
            {
                ColsNeedRemove = ColsNeedRemove.Distinct().ToList();
                ColsNeedRemove.Sort();
                int [] SequenceRemove = ColsNeedRemove.ToArray();
                for (int i = SequenceRemove.Length - 1; i >= 0; i--)
                {
                    dt.Rows.RemoveAt(SequenceRemove[i]);
                }
                dataGridView1.DataSource = dt;
            }
        }