Преобразовать тип столбца, используя его позицию / индекс - PullRequest
0 голосов
/ 04 февраля 2019

Я читаю некоторые .csv файлы из папки.Я пытаюсь создать список фреймов данных с использованием каждого файла.

В некоторых файлах значения столбцов, например Quantity, имеют типы данных str и float64.Поэтому я пытаюсь преобразовать этот столбец quantity в int.

Я получаю доступ к своим столбцам, используя их позицию / индекс (для целей автоматизации).

Из всех фреймов данных из списка, это один из них,

    CustName    ProductID   Quantity
0   56MED       110         '1215.0'
1   56MED       112         5003.0
2   56MED       114         '6822.0'
3   WillSup     2285        5645.0
4   WillSup     5622        6523.0
5   HammSup     9522        1254.0
6   HammSup     6954        5642.0

Поэтому у меня выглядит вот так:

df.columns[2] = pd.to_numeric(df.columns[2], errors='coerce').astype(str).astype(np.int64)

Я получаю,

TypeError: Index не поддерживает изменяемые операции

До этого я пытался,

df.columns[2] = pd.to_numeric(df.columns[2], errors='coerce').fillna(0).astype(str).astype(np.int64)

Однако я получил эту ошибку,

AttributeError: у объекта 'numpy.float64' нет атрибута 'fillna'

Есть сообщения, в которых используются имена столбцов напрямую, но не положение столбцов.Как я могу преобразовать мой столбец в int, используя позицию / индекс столбца в pnadas?

My pandas version

print(pd.__version__)
>> 0.23.3

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Попробуйте, вам нужно сначала удалить эти кавычки из ваших строк, затем использовать pd.to_numeric:

df.iloc[:, 2] = pd.to_numeric(df.iloc[:, 2].str.strip('\'')).astype(int)

ИЛИ из @jpp:

df['Quantity'] = pd.to_numeric(df['Quantity'].str.strip('\''), errors='coerce', downcast='integer')

Вывод, df.информация ():

<class 'pandas.core.frame.DataFrame'>
Int64Index: 7 entries, 0 to 6
Data columns (total 3 columns):
CustName     7 non-null object
ProductID    7 non-null int64
Quantity     7 non-null int32
dtypes: int32(1), int64(1), object(1)
memory usage: 196.0+ bytes

Вывод:

  CustName  ProductID  Quantity
0    56MED        110      1215
1    56MED        112      5003
2    56MED        114      6822
3  WillSup       2285      5645
4  WillSup       5622      6523
5  HammSup       9522      1254
6  HammSup       6954      5642
0 голосов
/ 05 февраля 2019

df.columns[2] возвращает скаляр , в данном случае строку.

Для доступа к серии используйте df['Quantity'] или df.iloc[:, 2], или даже df[df.columns[2]].Вместо повторяющихся преобразований, если вы уверены, что у вас есть данные, которые должны быть целыми числами, используйте downcast='integer'.

Все они эквивалентны:

df['Quantity'] = pd.to_numeric(df['Quantity'], errors='coerce', downcast='integer')

df.iloc[:, 2] = pd.to_numeric(df.iloc[:, 2], errors='coerce', downcast='integer')

df[df.columns[2]] = pd.to_numeric(df[df.columns[2]], errors='coerce', downcast='integer')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...