我将一个相对较大的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
感谢您的帮助
答案 0 :(得分:3)
您可以尝试以下代码: -
df['Col1'] = df['Col1'].replace('.','').replace(' ','').fillna('')
df['Col2'] = df['Col2'].replace('.','').replace(' ','').fillna('')
我正在使用'.'
替换第一个default value
和空格,然后将所有nan
值填充到default value
。我希望这会有所帮助。
答案 1 :(得分:1)
我认为最好决定单值(NaNs或空字符串),并将列值转换为该值。
在阅读数据时,请指定quotechar
和na_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
表达式匹配带有空格的单元格和可选的'.'
。