替换空白&在pandas中同时出现空字段

时间:2015-05-05 18:56:17

标签: python python-3.x pandas

我有一个数据框"列"哪个有空白& NaN(nulls)同时出现。现在我要更换空白&带字符串的NaN字段"无数据"。请给出相同的指导。我正在使用Python Pandas。

我的数据框列 -

Col1
----

NaN
New York
NaN

这是我试过的 -

df['Col1'] = df['Col1'].replace(r'\s+', "No Data", regex=True)
df['Col1'] = df['Col1'].replace(np.NaN, "No Data", regex=True)

我的结果列看起来像 -

Col1
----
No Data
No data
NewNo DataYork
No Data

感谢。

4 个答案:

答案 0 :(得分:4)

过滤df,将空/空白条目设置为NaN,然后填写:

In [27]:    
​
df = pd.DataFrame({'Col1':['',np.NaN,'New York',np.NaN]})
df
Out[27]:
       Col1
0          
1       NaN
2  New York
3       NaN
In [28]:

df.loc[df['Col1'].str.len() == 0, 'Col1'] = np.NaN
df['Col1'] = df['Col1'].fillna('No Data')
df
Out[28]:
       Col1
0   No Data
1   No Data
2  New York
3   No Data

答案 1 :(得分:2)

您必须指定正则表达式的开头和结尾:

In [11]: df.replace('^\s*$', np.nan, regex=True)
Out[11]:
       Col1
0       NaN
1       NaN
2  New York
3       NaN

In [12]: df.replace('^\s*$', np.nan, regex=True).fillna("No Data")
Out[12]:
       Col1
0   No Data
1   No Data
2  New York
3   No Data

答案 2 :(得分:1)

您可以将字典中要替换的值传递给replace函数:

In [944]: x.head()
Out[944]: 
  ind1      ind2  value  identifier
0   EA  01/01/07  0.231          55
1   EA  01/01/07  0.511          56
2   EA  01/01/07  0.357          57
3   EA  01/02/07  0.091          55
4   EA  01/02/07  0.161          57

In [945]: x.head().replace({55:'N/A', 56:'FiftySix'}, axis=1)
Out[945]: 
  ind1      ind2  value identifier
0   EA  01/01/07  0.231        N/A
1   EA  01/01/07  0.511   FiftySix
2   EA  01/01/07  0.357         57
3   EA  01/02/07  0.091        N/A
4   EA  01/02/07  0.161         57

答案 3 :(得分:1)

好的,这是基于where的方法:

>>> df["Col1"] = df.Col1.where(df.Col1.str.strip().str.len() > 0, "No Data")
>>> df
       Col1
0   No Data
1   No Data
2  New York
3   No Data

这取代了剥离后没有“无数据”的正长度的任何内容。 NaNs保持NaN,所以他们没有正长度。

(我很难记住正则表达式语法,所以我倾向于使用命名方法。)