这种行为对我来说似乎很奇怪:id当转换df另一列是timedelta时,列(字符串)转换为时间戳.
import pandas as pd
df = pd.DataFrame({'id': ['00115', '01222', '32333'],
'val': [12, 14, 170]})
df['val'] = pd.to_timedelta(df.val, unit='M')
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
Run Code Online (Sandbox Code Playgroud)
没有timedelta它按照我的预期工作,并且id列仍然是一个字符串,即使另一列是一个整数,所有字符串都可以安全地转换为整数.
df2 = pd.DataFrame({'id': ['00115', '01222', '32333'],
'val': [1, 1231, 1413]})
type(df2.T[0][0])
#str
Run Code Online (Sandbox Code Playgroud)
为什么id在第一个实例中更改get 的类型,而不是第二个实例?
应该在列中考虑数据帧.每列必须具有单一数据类型.转置时,您正在更改新列中现在相互关联的单元格.在转置之前,您有一个字符串列和一个timedelta列.转置后,每列都有一个字符串和一个timedelta.熊猫必须决定如何施放新的列.它决定与timedelta一起去.我认为这是一个愚蠢的选择.
您可以通过更改新构造的数据框上的dtype来更改此行为.
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
Run Code Online (Sandbox Code Playgroud)