Python 替换空白&;字段中同时出现空字段
我有一个数据帧“列”,它同时有一个空白&NaN(null)。现在我想用一个字符串“无数据”替换空白和NAND字段。请给出一些相同的指导。我正在使用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
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的数据类型仍然是一个对象。有什么建议吗。