我有以下数据框,我想将列'b'中的值转换为整数
a b c
0 1 NaN 3
1 5 7200.0 20
2 5 580.0 20
以下代码抛出异常 “ValueError:无法将NA转换为整数”
df['b'] = df['b'].astype(int)
如何仅将浮点数转换为int并保留空值?
答案 0 :(得分:2)
np.NaN
只是浮点数,因此必须将其删除才能创建整数pd.Series。 Jeon的建议工作很棒如果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)
如果有效0,那么您可以先用一些唯一值(例如-999999999)替换它们,即上面的转换,然后将这些唯一值替换为0' / p>
无论哪种方式,你必须记住,你曾经有过NaN的0。在进行各种数值分析(例如,平均值等)时,您需要小心过滤掉这些
答案 1 :(得分:1)
当您的系列包含浮点数和 nan 并且您想转换为整数时,当您尝试将浮点数转换为 numpy 整数时,您将收到错误消息,因为有 na 值。
不要做:
df['b'] = df['b'].astype(int)
从 pandas >= 0.24 开始,现在有一个内置的 pandas 整数。这确实允许整数nan。注意 'Int64'
中的大写。这是熊猫整数,而不是 numpy 整数。
所以,这样做:
df['b'] = df['b'].astype('Int64')
有关pandas integer na 值的更多信息:
https://pandas.pydata.org/pandas-docs/stable/user_guide/gotchas.html#nan-integer-na-values-and-na-type-promotions
答案 2 :(得分:0)
类似的答案是TSeymour,但现在使用的是熊猫的fillna:
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'] = df['b'].fillna(0).astype(int)
print(df)
哪个给:
a b c
0 1 NaN 3
1 5 7200.0 20
2 5 580.0 20
a b c
0 1 0 3
1 5 7200 20
2 5 580 20
答案 3 :(得分:0)