均匀化混合NaNs和空字符串的列

时间:2018-01-19 05:23:22

标签: python pandas

我将一个相对较大的csv(~200Mb)数据集导入到pandas中,其中一些列包含一个奇怪的“。” string(实际上是一个空单元格)或NaN。其他列包含NaN或空字符串。在第一种情况下,我想将奇怪的字符串转换为NaN。在第二种情况下,我想将NaNs转换为空字符串。我一直在尝试一些方法,但他们没有做我想要的。请注意,我不想使用dropna或任何影响其他行的内容。

例如

df['Col1'].replace(np.nan, '', regex=True)

在列的某些行中包含0。

作为一个例子,我想转换:

 Col1   Col2  Col
 ' .'   NaN    3 
 NaN   '  .'   1

  Col1 Col2 Col
  NaN  NaN  3
  NaN  NaN  1

并转换

 Col1 Col2 Col
 ""   NaN  3 
 NaN  5    1
 5    3    4

 Col1 Col2 Col
 ""   ""   3 
 ""   5    1
 5    3    4

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您可以尝试以下代码: -

df['Col1'] = df['Col1'].replace('.','').replace(' ','').fillna('')
df['Col2'] = df['Col2'].replace('.','').replace(' ','').fillna('')

我正在使用'.'替换第一个default value和空格,然后将所有nan值填充到default value。我希望这会有所帮助。

答案 1 :(得分:1)

我认为最好决定单值(NaNs或空字符串),并将列值转换为该值。

在阅读数据时,请指定quotecharna_values参数。

df = pd.read_excel('file.xls', quotechar="'", na_values=[''])

这应该消除空字符串,将它们转换为NaN(处理第二种情况)。接下来,对于您的第一个案例,请使用带有正则表达式的replace -

df.replace('^\s*\.?\s*$', np.nan, regex=True)

   Col1  Col2  Col
0   NaN   NaN    3
1   NaN   NaN    1

表达式匹配带有空格的单元格和可选的'.'