我有一个数据框"列"哪个有空白& 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
感谢。
答案 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,所以他们没有正长度。
(我很难记住正则表达式语法,所以我倾向于使用命名方法。)