如何规范 pandas 数据帧中的 numeric/non-numeric 条目
how to regularize numeric/non-numeric entries in pandas dataframes
我想控制 pandas 数据框中的非数字条目。
假设我有以下内容:
>>> df
col_1 col_2 col_3
0 0.01 NaN 0.1
1 NaN 0.9 0.2
2 0.01 NaN 0.3
3 0.01 0.9 0.4
我可以采用如下的行均值,而 python 正确地跳过 NaN 值:
>>> df.mean(axis=1)
0 0.055000
1 0.550000
2 0.155000
3 0.436667
dtype: float64
太棒了!但现在假设我导入的 table 中的一个值是一个字符串
>>> df.iloc[0,1]="str1"
>>> df
col_1 col_2 col_3
0 0.01 str1 0.1
1 NaN 0.9 0.2
2 0.01 NaN 0.3
3 0.01 0.9 0.4
>>> df.mean(axis=1)
0 0.055
1 0.200
2 0.155
3 0.205
dtype: float64
危险: 输出看似合理,但却是错误的,因为一旦我将位置 [0,1]
中的值更改为字符串,位置 [=16 中的值=] 和 [3,1]
从数字 0.9
变成了字符串 "0.9"
,并且所有的字符串都从平均中省略了(我猜每一列必须是相同的类型?有可能是一个原因,但是男孩,这是危险的微妙。)
我现在要做的是强制数据框的所有条目恢复为数字类型。任何可以被强制转换成数字的东西都应该变成那个数字,而 任何不能被转换成数字的东西 应该变成 nan
(不管它可能是什么字符串或类型)。
Pandas series 有一个函数 pandas.to_numeric
可以在其中设置 errors='coerce'
,但不幸的是 df 的类似函数 (DataFrame.astype()
) 不允许此选项。
是否有一个函数“使 dataFrame 的每个元素看起来像数字,并使其他所有元素 nan
”?
我认为您可以在 apply
列的子集上使用 to_numeric
。 可能会有帮助。
您可以apply
,默认情况下将对以下列执行:
df.apply(pd.to_numeric, errors='coerce').mean(1)
我想控制 pandas 数据框中的非数字条目。 假设我有以下内容:
>>> df
col_1 col_2 col_3
0 0.01 NaN 0.1
1 NaN 0.9 0.2
2 0.01 NaN 0.3
3 0.01 0.9 0.4
我可以采用如下的行均值,而 python 正确地跳过 NaN 值:
>>> df.mean(axis=1)
0 0.055000
1 0.550000
2 0.155000
3 0.436667
dtype: float64
太棒了!但现在假设我导入的 table 中的一个值是一个字符串
>>> df.iloc[0,1]="str1"
>>> df
col_1 col_2 col_3
0 0.01 str1 0.1
1 NaN 0.9 0.2
2 0.01 NaN 0.3
3 0.01 0.9 0.4
>>> df.mean(axis=1)
0 0.055
1 0.200
2 0.155
3 0.205
dtype: float64
危险: 输出看似合理,但却是错误的,因为一旦我将位置 [0,1]
中的值更改为字符串,位置 [=16 中的值=] 和 [3,1]
从数字 0.9
变成了字符串 "0.9"
,并且所有的字符串都从平均中省略了(我猜每一列必须是相同的类型?有可能是一个原因,但是男孩,这是危险的微妙。)
我现在要做的是强制数据框的所有条目恢复为数字类型。任何可以被强制转换成数字的东西都应该变成那个数字,而 任何不能被转换成数字的东西 应该变成 nan
(不管它可能是什么字符串或类型)。
Pandas series 有一个函数 pandas.to_numeric
可以在其中设置 errors='coerce'
,但不幸的是 df 的类似函数 (DataFrame.astype()
) 不允许此选项。
是否有一个函数“使 dataFrame 的每个元素看起来像数字,并使其他所有元素 nan
”?
我认为您可以在 apply
列的子集上使用 to_numeric
。
您可以apply
,默认情况下将对以下列执行:
df.apply(pd.to_numeric, errors='coerce').mean(1)