pandas 以字符串读取数据_Pandas 必知必会的18个实用技巧,值得收藏!!

论坛 期权论坛     
选择匿名的用户   2021-5-21 16:02   13   0
<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&#61;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&#61;&#39;-1&#39;<br>当多列缺失时,增加字典的键值对即可 na_values&#61;{&#39;a&#39;:&#39;-1&#39;,&#39;b&#39;:&#39;-10&#39;}</p>
  </blockquote>
  <h4>二、重新命名列</h4>
  <p>当原始数据的列名不好理解,或者不够简洁时,可以用.rename()方法进行修改。这里我们把英文的列名改成中文,先创建一个字典,把要修改的列名定义好,然后调用rename()方法。</p>
  <pre class="blockcode"><code>new_names &#61; {<!-- -->&#39;旧列名&#39;: &#39;新列名&#39;}<br>df.rename(columns&#61;new_names, inplace&#61;True)<br></code></pre>
  <h4>三、重新设置索引</h4>
  <p>数据默认的索引是从0开始的有序整数,但如果想把某一列设置为新的索引,除了可以用read_csv()里的参数index_col,还可以用.set_index()方法实现。</p>
  <pre class="blockcode"><code>df.set_index(&#39;列名&#39;, inplace&#61;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&#61;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(&#34;a&#34;, &#34;&#34;) 替换特定字符。这里把列中的a去掉,替换成空字符。</p>
  <blockquote>
   <p>strip()</p>
  </blockquote>
  <p>去除字符串中的头尾空格、以及\n \t。</p>
  <blockquote>
   <p>split()</p>
  </blockquote>
  <p>str.split(&#39;x&#39;) 使用字符串中的&#39;x&#39;字符作为分隔符,将字符串分隔成列表。这里将列中的值以&#39;.&#39;进行分割。</p>
  <blockquote>
   <p>get()</p>
  </blockquote>
  <p>str.get() 选取列表中某个位置的值。接着上面分割后的结果,我们用str.get(0)取出列表中前一个位置的数值,生成新的一列。</p>
  <blockquote>
   <p>contains()</p>
  </
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP