熊猫应用更改的dtype

时间:2018-08-29 13:25:38

标签: python python-3.x pandas

我正在尝试将熊猫数据框转换为一系列元组:

示例输入:

df = pd.DataFrame([[1,2,3.0],[3,4,5.0]])

所需的输出:

0    (1, 2, 3.0)
1    (3, 4, 5.0)
dtype: object    

但是,熊猫似乎将我的整数列强制转换为浮点数。

我尝试了

import pandas as pd

df = pd.DataFrame([[1,2,3.0],[3,4,5]])
print(df)
print(df.dtypes)
print(df.apply(tuple,axis=1,reduce=False).apply(str))

实际输出:

   0  1    2
0  1  2  3.0
1  3  4  5.0

0      int64
1      int64
2    float64
dtype: object

0    (1.0, 2.0, 3.0)
1    (3.0, 4.0, 5.0)
dtype: object

This question建议使用reduce=False,但这对我来说没有任何改变。

有人可以解释为什么大熊猫在沿途某个地方强制数据类型吗?

2 个答案:

答案 0 :(得分:4)

pandas.DataFrame.itertuples

避免强迫您的整数浮动

pd.Series([*df.itertuples(index=False)])

0    (1, 2, 3.0)
1    (3, 4, 5.0)
dtype: object

zipmap,飞溅...魔法

pd.Series([*zip(*map(df.get, df))])

0    (1, 2, 3.0)
1    (3, 4, 5.0)
dtype: object

答案 1 :(得分:3)

添加python2.7兼容解决方案:

In [3]: pd.Series(tuple(i) for i in df.itertuples())
Out[4]:
0    (0, 1, 2, 3.0)
1    (1, 3, 4, 5.0)
dtype: object