我有一个以某种方式包含所有对象的数据框-我认为应该没问题。 请注意,第一列的值类似于“ 10180”。
问题已解决:发生了某种奇怪的unicode事情。我的任务负责人解决了这个问题。我们只是以纯Excel格式阅读它,而不是转换为csv(我使用libreoffice做到了这一点)。问题解决了。 一个很大的暗示是所有这些“应该”起作用的东西都没有起作用。
所有这些都应为“ 10180”-无小数。 (请注意,在Jupyter中它可以正确显示。当我输出为csv时,只能将其升为小数。但是Jupyter确实知道这是一个对象。)
另一个问题可能是数据值看起来像“ 2,361.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’)
我已经看到其中一些作为其他stackoverflow问题的答案发布。但这对我不起作用。这一定是一个普遍的难题。有没有一种规范的方法可以做到这一点?
随后出现带有df ['CBSA Code']。apply(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'
答案 0 :(得分:1)
如果问题是CBSA Code
列是格式化为字符串的浮点数(从错误消息ValueError: invalid literal for int() with base 10: '10180.0'
看来,),则无法直接转换为int,但是您可以可以先转换为float然后转换为int:
df["CBSA Code"] = df["CBSA Code"].astype(float).astype(int)
答案 1 :(得分:1)
我怀疑CBSA Code
有一些非数字值,因此read_csv将其默认为dtype object
。您可以尝试使用可为空的整数dtype Int64
(注意:它是大写的'I'
)
df['CBSA Code'] = pd.to_numeric(df['CBSA Code'], errors='coerce').astype('Int64')