首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么转置带有字符串和时间增量的DataFrame会转换数据类型?

为什么转置带有字符串和时间增量的DataFrame会转换数据类型?
EN

Stack Overflow用户
提问于 2018-06-16 04:11:47
回答 1查看 1.1K关注 0票数 9

这种行为对我来说似乎很奇怪:如果另一列是时间增量,则在转置df时将id列(一个字符串)转换为时间戳。

import pandas as pd
df = pd.DataFrame({'id': ['00115', '01222', '32333'],
                   'val': [12, 14, 170]})
df['val'] = pd.to_timedelta(df.val, unit='Minutes')

print(df.T)
#                         0                      1                      2
#id  0 days 00:00:00.000000 0 days 00:00:00.000001 0 days 00:00:00.000032
#val      365 days 05:49:12      426 days 02:47:24     5174 days 06:27:00

type(df.T[0][0])
#pandas._libs.tslib.Timedelta

如果没有时间增量,它的工作方式与我预期的一样,并且id列仍然是一个字符串,即使另一列是整数,并且所有字符串都可以安全地转换为整数。

df2 = pd.DataFrame({'id': ['00115', '01222', '32333'],
                    'val': [1, 1231, 1413]})

type(df2.T[0][0])
#str

为什么id的类型在第一个实例中发生了变化,而在第二个实例中没有变化?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 04:31:22

数据帧应该以列的形式来考虑。每列必须具有单一的数据类型。转置时,将更改新列中现在相互关联的单元格。在transpose之前,您有一个字符串列和一个时间增量列。在转置之后,每列都有一个字符串和一个时间增量。熊猫必须决定如何投射新的列。它决定使用timedelta。我认为这是一个愚蠢的选择。

您可以通过更改新构造的数据帧上的数据类型来更改此行为。

pd.DataFrame(df.values.T, df.columns, df.index, dtype=object)

                     0                  1                   2
id               00115              01222               32333
val  365 days 05:49:12  426 days 02:47:24  5174 days 06:27:00
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50882090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档