您好我有一个问题是将对象列转换为完整列的整数。
我有一个数据框,我试图将一些被检测为Object的列转换为Integer(或Float),但我找到的所有答案都适合我:(
然后我尝试应用to_numeric方法但不起作用。 To numeric method
然后您可以在此处找到自定义方法:Pandas: convert dtype 'object' to int
但是也不起作用:data3['Title'].astype(str).astype(int)
(对不起,我再也无法传递图像了 - 你必须相信我它不起作用)
我尝试使用inplace语句,但似乎没有集成在这些方法中:
我很确定答案是愚蠢但找不到它:( 有人能帮助我吗?
由于
答案 0 :(得分:5)
您需要分配输出:
#maybe also works omit astype(str)
data3['Title'] = data3['Title'].astype(str).astype(int)
或者:
data3['Title'] = pd.to_numeric(data3['Title'])
样品:
data3 = pd.DataFrame({'Title':['15','12','10']})
print (data3)
Title
0 15
1 12
2 10
print (data3.dtypes)
Title object
dtype: object
data3['Title'] = pd.to_numeric(data3['Title'])
print (data3.dtypes)
Title int64
dtype: object
data3['Title'] = data3['Title'].astype(int)
print (data3.dtypes)
Title int32
dtype: object
答案 1 :(得分:3)
如python_enthusiast所说,
此命令也对我有用
data3.Title = data3.Title.str.replace(',', '').astype(float).astype(int)
但也可以与
一起使用data3.Title = data3.Title.str.replace(',', '').astype(int)
您必须在替换之前使用str才能摆脱逗号,然后将其更改为int / float,否则会出错。
答案 2 :(得分:0)
您也可以尝试使用此代码,与我一起正常工作
data3.Title= pd.factorize(data3.Title)[0]
答案 3 :(得分:0)
2年11个月后,但我走了。
重要的是要首先检查您的数据是否有空格,特殊字符(例如逗号,点或其他任何东西)。如果是,那么您基本上需要删除那些字符串,然后将字符串数据转换为float,然后转换为整数(对于我的数据为数值但带有逗号(例如4,118,662)的情况,这对我来说是有效的)。
data3.Title = data3.Title.str.replace(',', '').astype(flaoat).astype(int)
答案 4 :(得分:0)
我有一个像这样的数据集
dt1 <- structure(list(group = c(1L, 1L, 1L), type = c("cat", "dog",
"bird"), count = c(5L, 3L, 6L)), class = "data.frame", row.names = c(NA,
-3L))
dt2 <- structure(list(group = c(2L, 2L, 2L), type = c("cat", "dog",
"rat"), count = c(2L, 2L, 3L)), class = "data.frame", row.names = c(NA,
-3L))
dt3 <- structure(list(group = c(3L, 3L, 3L), type = c("fish", "dog",
"rat"), count = c(1L, 2L, 2L)), class = "data.frame", row.names = c(NA,
-3L))
dataset.info()
使用删除了None,NaN条目
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 79902 entries, 0 to 79901
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Query 79902 non-null object
1 Video Title 79902 non-null object
2 Video ID 79902 non-null object
3 Video Views 79902 non-null object
4 Comment ID 79902 non-null object
5 cleaned_comments 79902 non-null object
dtypes: object(6)
memory usage: 5.5+ MB
dataset = dataset.replace(to_replace='None', value=np.nan).dropna()
注意减少的条目
但<class 'pandas.core.frame.DataFrame'>
Int64Index: 79868 entries, 0 to 79901
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Query 79868 non-null object
1 Video Title 79868 non-null object
2 Video ID 79868 non-null object
3 Video Views 79868 non-null object
4 Comment ID 79868 non-null object
5 cleaned_comments 79868 non-null object
dtypes: object(6)
memory usage: 6.1+ MB
是浮点数,如Video Views
然后我用
dataset.head()
现在
dataset['Video Views'] = pd.to_numeric(dataset['Video Views'])
dataset['Video Views'] = dataset['Video Views'].astype(int)
问题已解决
答案 5 :(得分:0)
在旧版 Pandas 中,NaN
没有 int
,但新版 Pandas 提供了 Int64
,其中包含 pd.NA
。
因此,要从 object
到 int
且缺少数据,您可以这样做。
df['col'] = df['col'].astype(float)
df['col'] = df['col'].astype('Int64')
首先切换到浮动可以避免 object cannot be converted to an IntegerDtype
错误。
请注意 Int64
中的大写“I”。
此处有更多信息https://pandas.pydata.org/pandas-docs/stable/user_guide/integer_na.html
在 Pandas 1.0 中引入了新的 pd.NA 数据类型; pd.NA 的目标是提供一个“缺失”指示符,可以跨数据类型一致使用(而不是 np.nan、None 或 pd.NaT,具体取决于数据类型)。
考虑到这一点,他们创建了 dataframe.convert_dtypes()
和 Series.convert_dtypes()
函数,它们可以转换为支持 pd.NA 的数据类型。这目前被认为是实验性的,但很可能是一个光明的未来。