iloc и loc не работают при применении функции к нескольким столбцам, - PullRequest
0 голосов
/ 14 сентября 2018

Предположим, это мой df, а dtypes int64 в начале.

    A   B   C
0   1   2   3
1   5   6   7
2   8   9   10
3   13  14  15

Затем я попытался преобразовать все значения в astype str, используя

df = df.astype(str)
df.dtypes

A    int64
B    int64
C    int64
dtype: object

Теперь он изменил dtypes на object, как я и ожидал. Теперь я попытался снова преобразовать несколько столбцов в dtype int64, используя pd.to_numeric с apply function

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

Этот код был выполнен, но он не изменил dtypes col A and B на int64. Они все еще dtype object. Я не могу понять, почему это не сработало.

Я даже попробовал тот же код с loc вместо iloc, но он все еще не работает, dtypes все еще 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 

Примечание: я искал, но не смог найти ничего, связанного с моим вопросом. Если это дублирующий вопрос, пожалуйста, укажите мне на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...