<div class="._5ce-wx-style" style="font-size:16px;">
<div class="rich_media_content" id="js_content">
<p>干净整洁的数据是后续进行研究和分析的基础。数据科学家们会花费大量的时间来清理数据集,毫不夸张地说,数据清洗会占据他们80%的工作时间,而真正用来分析数据的时间只占到20%左右。</p>
<p>所以,数据清洗到底是在清洗些什么?<br>通常来说,你所获取到的原始数据不能直接用来分析,因为它们会有各种各样的问题,如包含无效信息,列名不规范、格式不一致,存在重复值,缺失值,异常值等.....</p>
<p>本文会给大家介绍一些Python中自带的Pandas和NumPy库进行数据清洗的实用技巧。</p>
<h4>一、 read_csv 读取文件</h4>
<p>这是读取数据的入门级命令,在分析一个数据集的时候,很多信息其实是用不到的,因此,需要去除不必要的行或列。这里以csv文件为例,在导入的时候就可以通过设置pd.read_csv()里面的参数来实现这个目的。</p>
<p><img alt="8324e7e2c36cae1851052b3dbfd93170.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-678135d340de17decd524c0b42442609.png"></p>
<p>先来感受一下官方文档中给出的详细解释,里面的参数是相当的多,本文只介绍比较常用的几个,感兴趣的话,可以好好研究一下文档,这些参数还是非常好用的,能省去很多导入后整理的工作。</p>
<blockquote>
<p>【header】默认header=0,即将文件中的0行作为列名和数据的开头,但有时候0行的数据是无关的,我们想跳过0行,让1行作为数据的开头,可以通过将header设置为1来实现。</p>
</blockquote>
<blockquote>
<p>【usecols】根据列的位置或名字,如[0,1,2]或[‘a’, ‘b’, ‘c’],选出特定的列。</p>
</blockquote>
<blockquote>
<p>【nrows】要导入的数据行数,在数据量很大、但只想导入其中一部分时使用。</p>
</blockquote>
<blockquote>
<p>【names】:指定自定义列名。此列表中不允许有重复项。</p>
</blockquote>
<blockquote>
<p>【index_col】: 指定用作数据框的行标签的列,以字符串名称或列索引的形式给出</p>
</blockquote>
<blockquote>
<p>【na_values】:指定数据框中需要被识别为NA/NaN 的字符串或字符串列表<br>当一列缺失时直接指定 na_values='-1'<br>当多列缺失时,增加字典的键值对即可 na_values={'a':'-1','b':'-10'}</p>
</blockquote>
<h4>二、重新命名列</h4>
<p>当原始数据的列名不好理解,或者不够简洁时,可以用.rename()方法进行修改。这里我们把英文的列名改成中文,先创建一个字典,把要修改的列名定义好,然后调用rename()方法。</p>
<pre class="blockcode"><code>new_names = {<!-- -->'旧列名': '新列名'}<br>df.rename(columns=new_names, inplace=True)<br></code></pre>
<h4>三、重新设置索引</h4>
<p>数据默认的索引是从0开始的有序整数,但如果想把某一列设置为新的索引,除了可以用read_csv()里的参数index_col,还可以用.set_index()方法实现。</p>
<pre class="blockcode"><code>df.set_index('列名', inplace=True)<br></code></pre>
<p><img alt="6c44698214e3b20f7904abf497e6598a.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-c85def07baf352287720634cc5ae0c29.png"></p>
<p>另外补充,如果数据经过删除或结构调整后,我们可以重置索引,让索引从0开始,依次排序。</p>
<pre class="blockcode"><code>df3.reset_index(drop=True)<br></code></pre>
<h4>四、用字符串操作规范列</h4>
<p>字符串str操作是非常实用的,因为列中总是会包含不必要的字符,常用的方法如下:</p>
<blockquote>
<p>lower()<br>upper()</p>
</blockquote>
<p>str.lower() 是把大写转换成小写,同理,str.upper()是把小写转换成大写,将示例中用大写字母表示的索引转换成小写。</p>
<blockquote>
<p>capitalize()</p>
</blockquote>
<p>设置首字母大写</p>
<blockquote>
<p>replace()</p>
</blockquote>
<p>str.replace("a", "") 替换特定字符。这里把列中的a去掉,替换成空字符。</p>
<blockquote>
<p>strip()</p>
</blockquote>
<p>去除字符串中的头尾空格、以及\n \t。</p>
<blockquote>
<p>split()</p>
</blockquote>
<p>str.split('x') 使用字符串中的'x'字符作为分隔符,将字符串分隔成列表。这里将列中的值以'.'进行分割。</p>
<blockquote>
<p>get()</p>
</blockquote>
<p>str.get() 选取列表中某个位置的值。接着上面分割后的结果,我们用str.get(0)取出列表中前一个位置的数值,生成新的一列。</p>
<blockquote>
<p>contains()</p>
</ |
|