Pandas说每一列都是一个对象,尽管我认为它是一个整数

2024-10-05 10:50:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它是所有的对象-我认为应该是好的。 请注意,第一列的值类似于“10180”。你知道吗

问题解决了:发生了一些奇怪的事情。我的任务负责人解决了这个问题。我们只是把它读成直接的excel,而不是转换成csv(我是用libreoffice来做的)。问题解决了。 一个很大的暗示是所有这些“应该”起作用的东西都不起作用。你知道吗

这些都应该是“10180”-没有小数点。(请注意,在Jupyter中它显示正确。只有当我输出为csv时才应该作为小数点。但是朱庇特知道这是一个物体。)

另一个问题可能是看起来像“2361.9”的数据值。这些应该是浮子。 我想我可以做一个类似的事情,去掉逗号,然后转换。你知道吗

样本数据:

CBSA Code,CBSA Title,violent,murder,rape,robbery,assault,property,burglary,larceny,vehicle theft
10180.0,"Abilene, TX",393.2,5.3,64.0,65.7,258.2,"2,361.9",534.0,"1,670.0",157.8
10420.0,"Akron, OH",361.6,6.4,48.7,73.0,233.6,"2,226.0",415.6,"1,659.4",150.9
10500.0,"Albany, GA",728.5,11.6,30.6,95.1,591.3,"3,734.5",773.4,"2,715.1",246.0
10580.0,"Albany-Schenectady-Troy, NY",283.7,2.2,38.3,62.4,180.8,"1,892.3",226.9,"1,584.8",80.6

第一列应该是整数。我试过了

df[‘CBSA Code’].apply(np.int64)  AND

df[‘CBSA Code’].astype(int) AND

df[‘CBSA Code’].astype(str).astype(int) AND

df[‘CBSA Code’] = df[‘CBSA Code’].astype(str)
df[‘CBSA Code’] = df[‘CBSA Code’].replace(“.0”, ’’)
df[‘CBSA Code’] = df[‘CBSA Code’].astype(‘int’)

我在其他问题中也看到了一些答案。但这对我没用。这一定是一个常见的难题。有没有一个规范的方法可以做到这一点?你知道吗

带有df['CBSA Code']的错误消息。应用(np.int64型)跟随

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-189-6c1c6381a02c> in <module>
----> 1 df['CBSA Code'].apply(np.int64)

~\AppData\Roaming\Python\Python37\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
   3589             else:
   3590                 values = self.astype(object).values
-> 3591                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   3592 
   3593         if len(mapped) and isinstance(mapped[0], Series):

pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()

ValueError: invalid literal for int() with base 10: '10180.0'

Tags: and数据inconvertpandasdfnpcode
2条回答

如果问题是CBSA Code列是一个格式化为字符串的float(从错误消息:ValueError: invalid literal for int() with base 10: '10180.0'中可以看出),则不能直接转换为int,但可以先转换为float,然后转换为int:

df["CBSA Code"] = df["CBSA Code"].astype(float).astype(int)

我怀疑CBSA Code有一些非数字值,所以read\u csv默认为dtype object。您可以尝试使用可为空的整数数据类型Int64注意:它是大写的'I'

df['CBSA Code'] = pd.to_numeric(df['CBSA Code'], errors='coerce').astype('Int64')

相关问题 更多 >

    热门问题