仅对选定列进行熊猫数据清洗

时间:2019-03-15 13:41:43

标签: python pandas

我最近正在与Pandas一起工作,并且在数据清理过程中遇到问题在这里,我需要替换具有点模式(即“ ...”或“ ............”)的列值熊猫到NaN

My actual dataframe i.e. energy

我现在要做的就是简单地使用replace方法将该点状图案替换为NaN

这是我的代码:

energy.replace('...*','NaN', regex=True, inplace=True)

我的输出:

My output after the above code

我已成功将具有点图案的数据清除为NaN ,但我的国家/地区列的所有值也均更改为NaN ,如第二幅图像所示。我尝试搜索此问题,以了解如何仅更改选定的列值,但得到了各种方法,但均不适用于我的方案。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您的国家/地区列已更改,因为您使用的是正则表达式,并且在正则表达式.中,是任何符号。您可能想使用像'\.+'这样的正则表达式,它将匹配任意数量的.字符。这是一种解决方案,不需要您将执行限制为特定的列。

在我的数据模拟模型上使用\.+中的energy.replace(r'\.+', 'NaN', regex=True, inplace=True)时,输出为:

>>> energy
       Country Energy Supply Energy Supply Per Capita  % Renewable
0  some_string      16846846                      484     85.48648
1  some_string      16846846                      484     85.48648
2  some_string      16846846                      484     85.48648
3  some_string           NaN                      NaN     85.48648
4  some_string      16846846                      484     85.48648

出于完整性考虑,您还可以通过仅在该列上调用replace函数来将执行限制在特定的列上:

energy['Energy Supply'].replace(r'\.+', 'NaN', regex=True, inplace=True)

这给出了输出:

>>> energy
       Country Energy Supply Energy Supply Per Capita % Renewable
0  some_string      16846846                      484     85.4865
1  some_string      16846846                      484     85.4865
2  some_string      16846846                      484     85.4865
3  some_string           NaN                      ...     85.4865
4  some_string      16846846                      484     85.4865