pandas to_numeric无法将字符串值转换为整数

时间:2017-08-15 15:47:45

标签: python-3.x pandas numpy dataframe series

我正在尝试使用pandas.to_numeric将系列转换为int s。

df['numeric_col'] = pd.to_numeric(df['numeric_col'], errors='raise')

我收到了错误,

Traceback (most recent call last):
  File "/home/user_name/script.py", line 86, in execute
data = module(**module_args).execute(data)
  File "/home/user_name/script.py", line 62, in execute
invoices['numeric_invoice_no'] = pd.to_numeric(invoices['numeric_invoice_no'], errors='raise')
  File "/usr/local/lib/python3.5/dist-packages/pandas/core/tools/numeric.py", line 126, in to_numeric
coerce_numeric=coerce_numeric)
  File "pandas/_libs/src/inference.pyx", line 1052, in pandas._libs.lib.maybe_convert_numeric (pandas/_libs/lib.c:56638)
ValueError: Integer out of range. at position 106759

如果我将其更改为,

df['numeric_col'] = pd.to_numeric(df['numeric_col'], errors='coerce')

numeric_col中的值不会转换为int s,即它们仍为string s。

如果我换了,

df['numeric_col'] = df['numeric_col'].astype(int)

我收到了错误,

OverflowError: Python int too large to convert to C long

所以我必须把它改成,

df['numeric_col'] = df['numeric_col'].astype(float)

然后没有产生错误。

系列的大小约为994572,列中的字符串类似于523336122735603286002031757

我想知道to_numericastype在这里有什么问题。

我正在Python 3.5上运行Linux mint 18.1 64-bit

1 个答案:

答案 0 :(得分:0)

也许您的数字字符串值中有逗号(,),或者数据框的列中有空值(NaN),因此请尝试使用空格替换逗号 .replace() 方法 然后删除或填充空值 .fillna() 或 .replace 或 .dropna()

使用前 df['DataFrame Column'] = df['DataFrame Column'].astype(int)