bil*_*ard 5 python numpy pandas
我有以下数据框,我想将“ b”列中的值转换为整数
a b c
0 1 NaN 3
1 5 7200.0 20
2 5 580.0 20
Run Code Online (Sandbox Code Playgroud)
以下代码引发异常“ ValueError:无法将NA转换为整数”
df['b'] = df['b'].astype(int)
Run Code Online (Sandbox Code Playgroud)
如何将仅浮点数转换为int并保持原样为空?
San*_*ord 10
当您的系列包含浮点数和 nan 并且您想要转换为整数时,当您尝试将浮点数转换为 numpy 整数时,您会收到错误,因为存在 na 值。
不要这样做:
df['b'] = df['b'].astype(int)
Run Code Online (Sandbox Code Playgroud)
从 pandas >= 0.24 开始,现在有一个内置的 pandas 整数。这确实允许整数 nan。注意 中的大写字母'Int64'。这是 pandas 整数,而不是 numpy 整数。
所以,这样做:
df['b'] = df['b'].astype('Int64')
Run Code Online (Sandbox Code Playgroud)
有关 pandas 整数 na 值的更多信息:
https://pandas.pydata.org/pandas-docs/stable/user_guide/gotchas.html#nan-integer-na-values-and-na-type-promotions
np.NaN是浮点唯一类型的东西,因此必须将其删除才能创建整数 pd.Series。如果 0 不是df['b']. 例如:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1, 5, 5], 'b': [np.NaN, 7200.0, 580.0], 'c': [3, 20, 20]})
print(df, '\n\n')
df['b'] = np.nan_to_num(df['b']).astype(int)
print(df)
Run Code Online (Sandbox Code Playgroud)
如果有有效的 0,那么您可以先将它们全部替换为某个唯一值(例如,-999999999),即上面的转换,然后将这些唯一值替换为 0。
无论哪种方式,您都必须记住,在曾经有 NaN 的地方,您有 0。在进行各种数值分析(例如,均值等)时,您需要小心地将这些过滤掉。
| 归档时间: |
|
| 查看次数: |
3909 次 |
| 最近记录: |