Pandas iterrows将列的类型更改为float。如何将其转换回原始类型?

时间:2017-02-24 11:57:35

标签: python pandas

Pandas iterrows更改列的类型。根据{{​​3}} github问题,这是一种预期的行为。

有什么想法将pythonic和优雅的方法重新投射到原始类型? 请注意,我有多种列类型。

最小的例子

df = pd.DataFrame([range(5), range(5)])
df.iloc[:,1] = df.iloc[:,1].astype('float')
for row in df.iterrows():
    print row

结果

(0, 0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
Name: 0, dtype: float64)
(1, 0    0.0
1    1.0
2    2.0
3    3.0
4    4.0
Name: 1, dtype: float64)

请注意,df.dtypes会返回列的类型,但是,我无法想到使用它将行转换回该类型的优雅方式。

2 个答案:

答案 0 :(得分:5)

请尝试使用df.itertuples

df = pd.DataFrame([range(5), range(5)], columns=list('abcde'))
df.iloc[:,1] = df.iloc[:,1].astype('float')

for row in df.itertuples():
    print(row)

Pandas(Index=0, a=0, b=1.0, c=2, d=3, e=4)
Pandas(Index=1, a=0, b=1.0, c=2, d=3, e=4)

答案 1 :(得分:0)

您可以通过以下方式进行此迭代,保持数据类型:

import pandas

df = pandas.DataFrame({'ints': list(range(5)), 'floats': [float(i) for i in range(5)]})
print(df)
for idx in df.index:
    print(f'Integer number: {df.loc[idx,"ints"]}')
    print(f'Float number: {df.loc[idx,"floats"]}')

输出(在 Python 3.8.5 中)是

   ints  floats
0     0     0.0
1     1     1.0
2     2     2.0
3     3     3.0
4     4     4.0
Integer number: 0
Float number: 0.0
Integer number: 1
Float number: 1.0
Integer number: 2
Float number: 2.0
Integer number: 3
Float number: 3.0
Integer number: 4
Float number: 4.0