我正在尝试使用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,列中的字符串类似于52333612273
,56032860
或02031757
。
我想知道to_numeric
和astype
在这里有什么问题。
我正在Python 3.5
上运行Linux mint 18.1 64-bit
。
答案 0 :(得分:0)
也许您的数字字符串值中有逗号(,),或者数据框的列中有空值(NaN),因此请尝试使用空格替换逗号 .replace() 方法 然后删除或填充空值 .fillna() 或 .replace 或 .dropna()
使用前 df['DataFrame Column'] = df['DataFrame Column'].astype(int)