Как преобразовать последние несколько столбцов в целое число из строкового типа в пандах
У меня есть df под названием df
,
Я хочу преобразовать последние 10 столбцов этого кадра данных из строкового типа в целые числа. Как я могу сделать это питонским способом?
1 ответ
Решение
Я думаю, что самый быстрый способ заключается в использовании convert_objects
и выберите последние 10 столбцов, используя нижнюю запись / срезы, например:
In [23]:
df = pd.DataFrame({'a':['1','2','3','4','5']})
df = pd.concat([df]*11, axis=1)
df.columns = list('abcdefghijk')
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 0 to 4
Data columns (total 11 columns):
a 5 non-null object
b 5 non-null object
c 5 non-null object
d 5 non-null object
e 5 non-null object
f 5 non-null object
g 5 non-null object
h 5 non-null object
i 5 non-null object
j 5 non-null object
k 5 non-null object
dtypes: object(11)
memory usage: 480.0+ bytes
In [21]:
converted = df[df.columns[-10:]].convert_objects(convert_numeric=True)
converted
Out[21]:
b c d e f g h i j k
0 1 1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 2 2 2
2 3 3 3 3 3 3 3 3 3 3
3 4 4 4 4 4 4 4 4 4 4
4 5 5 5 5 5 5 5 5 5 5
In [22]:
converted.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 0 to 4
Data columns (total 10 columns):
b 5 non-null int64
c 5 non-null int64
d 5 non-null int64
e 5 non-null int64
f 5 non-null int64
g 5 non-null int64
h 5 non-null int64
i 5 non-null int64
j 5 non-null int64
k 5 non-null int64
dtypes: int64(10)
memory usage: 440.0 bytes
Затем вы можете либо напрямую присвоить результат:
In [31]:
df[df.columns[-10:]] = converted
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 0 to 4
Data columns (total 11 columns):
a 5 non-null object
b 5 non-null int64
c 5 non-null int64
d 5 non-null int64
e 5 non-null int64
f 5 non-null int64
g 5 non-null int64
h 5 non-null int64
i 5 non-null int64
j 5 non-null int64
k 5 non-null int64
dtypes: int64(10), object(1)
memory usage: 480.0+ bytes
или сделать это в 1 вкладыш:
In [33]:
df[df.columns[-10:]] = df[df.columns[-10:]].convert_objects(convert_numeric=True)
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 0 to 4
Data columns (total 11 columns):
a 5 non-null object
b 5 non-null int64
c 5 non-null int64
d 5 non-null int64
e 5 non-null int64
f 5 non-null int64
g 5 non-null int64
h 5 non-null int64
i 5 non-null int64
j 5 non-null int64
k 5 non-null int64
dtypes: int64(10), object(1)
memory usage: 480.0+ bytes