【问题标题】:Python convert specific dataframe columns to integerPython将特定的数据框列转换为整数
【发布时间】:2018-03-19 00:43:11
【问题描述】:

我有一个 8 列的数据框,我想将最后六列转换为整数。数据框还包含 NaN 值,我不想删除它们。

      a      b    c     d     e     f     g    h
0   john     1   NaN   2.0    2.0  42.0  3.0  NaN
1   david    2  28.0  52.0   15.0  NaN   2.0  NaN
2   kevin    3   1.0   NaN   1.0   10.0  1.0  5.0

有什么想法吗?

谢谢。

【问题讨论】:

  • 你知道列中已经存在的浮点值是否可以限制在一个区间内吗?说[0,100]?
  • 是的,这很简单,很快你就会得到答案:o

标签: python dataframe integer type-conversion


【解决方案1】:

谢谢@AntonvBR for the downcast='integer' hint:

In [29]: df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, errors='coerce', downcast='integer')

In [30]: df
Out[30]:
       a  b     c     d   e     f  g    h
0   john  1   NaN   2.0   2  42.0  3  NaN
1  david  2  28.0  52.0  15   NaN  2  NaN
2  kevin  3   1.0   NaN   1  10.0  1  5.0

In [31]: df.dtypes
Out[31]:
a     object
b      int64
c    float64
d    float64
e       int8
f    float64
g       int8
h    float64
dtype: object

【讨论】:

  • 嘿!在你们中的一些人打字之前,甚至不可能开始考虑解决方案。但他想要整数。 downcast='integer'?
  • 是的,我需要整数..这将转换为浮点数:) @AntonvBR
  • @Giada,整数列不能包含 NaN,因此您需要将 NaN 替换为某个整数值或使用浮点数...
  • @MaxU 使用 downcast='integer' 我得到的 g 列是整数,你的是浮点数。我用 df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, downcast='integer')
  • @AntonvBR,是的,我的错,对不起!现在已经修复了
【解决方案2】:

感谢 MaxU,我用 nan = -1 添加了这个选项:

原因:nan 值是浮点值,不能与整数共存。 因此,无论是 nan 值和浮点数,还是将 -1 视为 nan 的选项

http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_numeric.html

import pandas as pd
import numpy as np

df = pd.DataFrame.from_dict({'a': {0: 'john', 1: 'david', 2: 'kevin'},
 'b': {0: 1, 1: 2, 2: 3},
 'c': {0: np.nan, 1: 28.0, 2: 1.0},
 'd': {0: 2.0, 1: 52.0, 2: np.nan},
 'e': {0: 2.0, 1: 15.0, 2: 1.0},
 'f': {0: 42.0, 1: np.nan, 2: 10.0},
 'g': {0: 3.0, 1: 2.0, 2: 1.0},
 'h': {0: np.nan, 1: np.nan, 2: 5.0}})

df.iloc[:, -6:] = df.iloc[:, -6:].fillna(-1)
df.iloc[:, -6:] = df.iloc[:, -6:].apply(pd.to_numeric, downcast='integer')

df

    a   b   c   d   e   f   g   h
0   john    1   -1  2   2   42  3   -1
1   david   2   28  52  15  -1  2   -1
2   kevin   3   1   -1  1   10  1   5

【讨论】:

    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2021-04-12
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多