<p>如果没有对每一列的好值和坏值的良好定义,您实际上无法自动执行任何操作。有几个数据清理技巧可用于使这些值更容易在大型数据集中找到</p>
<p>从原始数据集开始:</p>
<pre><code>import pandas as pd
data = {'Name': ['Tom', 'AABBCC', 'Joseph', 'Krish', 'XXXX', 'John', 'U'],
'Address1': ['High Street', 'uwdfjfuf', '00000', 'Green Lane', 'Kingsway', 'Church Street', 'iwefwfn'],
'Address2': ['Park Avenue', 'The Crescent', 'ABCXYZ', 'Highfield Road', 'Stanley Road', 'New Street', '1ca2s597']}
contact_details = pd.DataFrame(data)
</code></pre>
<p>您可以做的第一件事是获取列的唯一值,以减少正在查看的值的数量</p>
<pre><code># get all the unique values in the 'Name' column
names = contact_details['Name'].unique()
</code></pre>
<p>接下来,您可以对它们进行排序,以便任何近似的重复项都更容易突出。几乎重复的情况经常发生,数据输入错误</p>
<pre><code># sort them alphabetically and then take a closer look
names.sort()
print(list(names))
</code></pre>
<p>例如,如果您看到了值<code>' Tom'</code>、<code>'Tom'</code>和<code>'Tom '</code>,您知道需要从名称中去掉空白</p>
<pre><code>contact_details['Name'] = contact_details['Name'].strip()
</code></pre>
<p>对列中的唯一值进行排序的另一个好处是,以数字开头的字符串值将全部位于列表的开头,小写字符串将在列表的末尾进行排序。这使得您的两个<code>'Address1</code>值脱颖而出</p>
<pre><code># get all the unique values in the 'Address1' column
address1 = contact_details['Address1'].unique()
address1.sort()
print(list(address1))
</code></pre>
<p>这为我提供了唯一值的列表:</p>
<pre><code>['00000', 'Church Street', 'Green Lane', 'High Street', 'Kingsway', 'iwefwfn', 'uwdfjfuf']
</code></pre>
<p>目前还不清楚第一个值是否有效,但最后两个值看起来很可疑。如果我想删除这些,我可以通过选择坏值列表中<code>Address1</code>为<strong>非<strong>的所有行来过滤掉它们</p>
<pre><code>contact_details_filtered = contact_details[~contact_details['Address1'].isin(['iwefwfn', 'uwdfjfuf'])]
print(contact_details_filtered)
</code></pre>
<p>这给了我输出:</p>
<pre><code> Name Address1 Address2
0 Tom High Street Park Avenue
2 Joseph 00000 ABCXYZ
3 Krish Green Lane Highfield Road
4 XXXX Kingsway Stanley Road
5 John Church Street New Street
</code></pre>
<p>第2行肯定是可疑的,第4行是可疑的,但我认为您了解了如何查找和删除看起来像占位符或只是坏数据的值</p>