Python 将函数应用于多列时,iloc和loc不工作,
假设这是我的Python 将函数应用于多列时,iloc和loc不工作,,python,python-3.x,pandas,Python,Python 3.x,Pandas,假设这是我的df,开始时数据类型是int64 A B C 0 1 2 3 1 5 6 7 2 8 9 10 3 13 14 15 然后我尝试使用 df = df.astype(str) df.dtypes A int64 B int64 C int64 dtype: object 现在它将数据类型更改为object,这与我预期的一样。现在我尝试使用pd.to\u numeric和apply函数再次将一些列转换为d
df
,开始时数据类型是int64
A B C
0 1 2 3
1 5 6 7
2 8 9 10
3 13 14 15
然后我尝试使用
df = df.astype(str)
df.dtypes
A int64
B int64
C int64
dtype: object
现在它将数据类型更改为object
,这与我预期的一样。现在我尝试使用pd.to\u numeric
和apply
函数再次将一些列转换为dtypeint64
df.iloc[:, 0:2] = df.iloc[:, 0:2].apply(pd.to_numeric, errors='coerce')
print(df.dtypes)
A object
B object
C object
dtype: object
执行了上述代码,但没有将colA和B的数据类型更改为int64
。它们仍然是数据类型对象
。我不明白为什么它不起作用
我甚至用loc
而不是iloc
尝试了相同的代码,但仍然不起作用。数据类型仍然是object
df.loc[:, ['A','B']] = df.loc[:, ['A','B']].apply(pd.to_numeric, errors='coerce')
但是当我只使用df[[cols]]
时,它就工作了
df[['A','B']] = df[['A','B']].apply(pd.to_numeric, errors='coerce') # This works
注意:我已经搜索了,但找不到与我的问题相关的任何内容。如果这是一个重复的问题,请告诉我 我想说这是一个bug。我可以补充一点,问题不在于iloc
和loc
没有像问题中暗示的那样“改变”dtype
df[['A',B']]=df.iloc[:,0:2]。应用(pd.to_numeric,errors='concurve')
将正确更新dtype
。数据类型可能重复