我正在尝试将熊猫数据框转换为一系列元组:
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
,但这对我来说没有任何改变。
有人可以解释为什么大熊猫在沿途某个地方强制数据类型吗?
答案 0 :(得分:4)
pandas.DataFrame.itertuples
避免强迫您的整数浮动
pd.Series([*df.itertuples(index=False)])
0 (1, 2, 3.0)
1 (3, 4, 5.0)
dtype: object
zip
,map
,飞溅...魔法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