检查 pandas 数据框中的列值是否为数字
Check if a column value is numeric in pandas dataframe
我有一个要清理的数据集。该数据集由 54 列和 315 行组成。对于其中一列,我想确定该列中的所有值是否都是数字。我做了以下事情:
work_sheet = pd.read_excel('2006_sale.xlsx', sheet_name='Sheet1')
df = work_sheet.copy()
尝试 1
for idx,val in enumerate(df['LotArea']):
if(not(str(val).isnumeric())): # Check if a value is numeric or not
df.at[idx,'LotArea'] = np.nan # If the value is not numeric then replace it with null
尝试 2
for idx,val in enumerate(df['LotArea']):
if(not(isinstance(val,float))): # Check if a value is numeric or not
df.at[idx,'LotArea'] = np.nan # If the value is not numeric then replace it with null
LotArea 的示例值是:
两种方法都有问题
它以某种方式将每个值检测为 non-numeric,我的最终输出如下所示:
知道我哪里出错了吗?
首先我想把这个 link 放在这里。
pandas 中的 for-loop 是反模式的,有许多不使用 for-loop 实现数据转换的高效方法。请检查 link.
要回答您的问题,请使用带正则表达式的 replace
函数。
df['LotArea'] = df.LotArea.replace(regex='|[^\d+]', value=np.nan)
实现此目的不需要 for 循环。您可以使用 pd.to_numeric 方法并通过将错误设置为 'coerce',所有非数字值都将替换为 NaN。
df['LotArea'] = pd.to_numeric(df['LotArea'], errors='coerce')
我有一个要清理的数据集。该数据集由 54 列和 315 行组成。对于其中一列,我想确定该列中的所有值是否都是数字。我做了以下事情:
work_sheet = pd.read_excel('2006_sale.xlsx', sheet_name='Sheet1')
df = work_sheet.copy()
尝试 1
for idx,val in enumerate(df['LotArea']):
if(not(str(val).isnumeric())): # Check if a value is numeric or not
df.at[idx,'LotArea'] = np.nan # If the value is not numeric then replace it with null
尝试 2
for idx,val in enumerate(df['LotArea']):
if(not(isinstance(val,float))): # Check if a value is numeric or not
df.at[idx,'LotArea'] = np.nan # If the value is not numeric then replace it with null
LotArea 的示例值是:
两种方法都有问题
它以某种方式将每个值检测为 non-numeric,我的最终输出如下所示:
知道我哪里出错了吗?
首先我想把这个 link 放在这里。 pandas 中的 for-loop 是反模式的,有许多不使用 for-loop 实现数据转换的高效方法。请检查 link.
要回答您的问题,请使用带正则表达式的 replace
函数。
df['LotArea'] = df.LotArea.replace(regex='|[^\d+]', value=np.nan)
实现此目的不需要 for 循环。您可以使用 pd.to_numeric 方法并通过将错误设置为 'coerce',所有非数字值都将替换为 NaN。
df['LotArea'] = pd.to_numeric(df['LotArea'], errors='coerce')