按元素向下转换系列或数据帧

时间:2016-11-11 16:38:28

标签: python pandas numpy dataframe

考虑pd.DataFrame df

df = pd.DataFrame([
        [1.0, 1.5],
        [2.2, 3.0]
    ])

如果它们相等,我想将各个元素向下转换为int。我知道每列最终都会成为对象类型。没关系。

enter image description here

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
0    2 non-null object
1    2 non-null object
dtypes: object(2)
memory usage: 112.0+ bytes

1 个答案:

答案 0 :(得分:2)

您需要先将dtype转换为object,然后您可以使用掩码在df上使用astype(int)覆盖感兴趣的值,假设所有列都是数字:

In [120]:
df = df.astype(object)
df[df == df.astype(int)] = df.astype(int)
df

Out[120]:
     0    1
0    1  1.5
1  2.2    3

如果没有强制转换,则赋值保持为float

您可以看到各个类型已更改:

In [123]:
df.applymap(type)

Out[123]:
                 0                1
0    <class 'int'>  <class 'float'>
1  <class 'float'>    <class 'int'>