Pandas:将数据类型“object”转换为in

2024-04-20 12:57:12 发布

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

我已经在Pandas中读取了一个SQL查询,这些值以dtype'object'的形式出现,尽管它们是字符串、日期和整数。我可以将日期“object”转换为Pandas datetime数据类型,但在尝试转换字符串和整数时出错。

下面是一个例子:

>>> import pandas as pd
>>> df = pd.read_sql_query('select * from my_table', conn)
>>> df
    id    date          purchase
 1  abc1  2016-05-22    1
 2  abc2  2016-05-29    0
 3  abc3  2016-05-22    2
 4  abc4  2016-05-22    0

>>> df.dtypes
 id          object
 date        object
 purchase    object
 dtype: object

df['date']转换为datetime可以:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 

但是,当试图将df['purchase']转换为整数时,出现了一个错误:

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: long() argument must be a string or a number, not 'java.lang.Long'

注意:当我尝试.astype('float')时,也会出现类似的错误

当试图转换成字符串时,似乎什么都没有发生。

>>> df['id'].apply(str)
 1 abc1
 2 abc2
 3 abc3
 4 abc4
 Name: id, dtype: object

Tags: 字符串idpandasdfdatetimedateobjectlib
3条回答

遵循以下步骤:

1.清理文件->;以csv格式打开数据文件,查看是否存在“?”替换空位置并删除所有空位置。

2.删除包含缺少值的行 e、 g.:

df.dropna(subset=["normalized-losses"], axis = 0 , inplace= True)

3.立即使用astype进行转换

df["normalized-losses"]=df["normalized-losses"].astype(int)

注意:如果仍然在程序中发现错误,则再次检查csv文件,在excel中打开它以查找是否存在“?”在“必需”列中,删除它并保存文件,然后返回并运行程序。

评论成功!如果成功的话。:)

根据@piRSquared的评论记录我的答案。

我需要先转换成字符串,然后是整数。

>>> df['purchase'].astype(str).astype(int)

很简单

pd.factorize(df.purchase)[0]

示例:

labels, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'])`
labels
# array([0, 0, 1, 2, 0])
uniques
# array(['b', 'a', 'c'], dtype=object)

相关问题 更多 >