Python 替换空白&;字段中同时出现空字段

Python 替换空白&;字段中同时出现空字段,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据帧“列”,它同时有一个空白&NaN(null)。现在我想用一个字符串“无数据”替换空白和NAND字段。请给出一些相同的指导。我正在使用Python熊猫 我的数据帧列- 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=T

我有一个数据帧“列”,它同时有一个空白&NaN(null)。现在我想用一个字符串“无数据”替换空白和NAND字段。请给出一些相同的指导。我正在使用Python熊猫

我的数据帧列-

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

谢谢。

过滤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

过滤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

您可以将要在字典中替换的值传递给
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

您可以将要在字典中替换的值传递给
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

必须指定正则表达式的开始和结束:

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

必须指定正则表达式的开始和结束:

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

好的,这里有一个基于
的方法,其中

>>> 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
这将用“无数据”替换剥离后没有正长度的任何内容。NaN保持NaN,因此它们的长度不为正


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

好的,这里有一个基于
的方法:

>>> 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
这将用“无数据”替换剥离后没有正长度的任何内容。NaN保持NaN,因此它们的长度不为正


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

我认为这是最规范的方法,因为.fillna()@EdChum-当我试图将数据帧写入sql时,它会给我以下错误“TypeError:预期unicode数据”;即使col的数据类型仍然是一个对象。请提供任何建议。这意味着您可能有一些错误的数据,如果没有太多行,您可以扫描
df['Col1']的输出。unique()
df[df['Col1']。应用(lambda x:isinstance(x,str)==False)]
以查看是否有任何值不是
str
我认为这是最规范的方法,因为.fillna()@EdChum—当我尝试将数据帧写入sql时,它会给我以下错误“TypeError:expecting unicode数据”;即使col的数据类型仍然是一个对象。请提供任何建议。这意味着您可能有一些错误的数据,如果没有太多行,您可以扫描
df['Col1']的输出。unique()
df[df['Col1']。应用(lambda x:isinstance(x,str)==False)]
以查看是否有任何值不是
str,它给出了以下错误“TypeError:需要unicode数据”;即使col的数据类型仍然是一个对象。请提供任何建议。#DSM-当我试图将数据帧写入sql时,它会给我以下错误“TypeError:expecting unicode数据”;即使col的数据类型仍然是一个对象。请给我任何建议。当我试图将数据框写入sql时,它会给我以下错误“TypeError:需要unicode数据”;即使col的数据类型仍然是一个对象。请给我任何建议。当我试图将数据框写入sql时,它会给我以下错误“TypeError:需要unicode数据”;即使col的数据类型仍然是一个对象。有什么建议吗。