【问题标题】:How to resolve TypeError: cannot convert the series to <type 'float'>如何解决 TypeError:无法将系列转换为 <type 'float'>
【发布时间】:2018-12-26 03:13:29
【问题描述】:

时间的纪元值转换为特定纪元值如下:

time.strftime("%H:%M:%S ", time.localtime(28000000000))  
Out[82]: '07:16:40 '     

但是当我将上述方法应用于数据集中的一列纪元时间时,

time.strftime("%H:%M:%S ", time.localtime(df1['d']))

我收到以下错误:

TypeError: cannot convert the series to type 'float'

我哪里出错了?

df1['d'] 为历元持续时间,列中数据如下:

28000000000
16000000000
33000000000
28000000000
27000000000
22000000000
26000000000
22000000000
22000000000
22000000000
46000000000

我需要纪元时间而不是 datetime 对象格式。

【问题讨论】:

  • time.localtime(df1['d']) 的值是多少?
  • 你好@sachindubey 值time.localtime(df1['d']) 给出TypeError: cannot convert the series to &lt;type 'float'&gt;
  • 对不起,我的意思是 df1['d'] 的值?
  • DF1 [“d”]具有在列历元的持续时间等280亿160亿330亿280亿270亿220亿260亿220亿220亿220亿460亿我将在主部分中添加这些值。跨度>

标签: python pandas epoch


【解决方案1】:

我认为需要 Series.apply 和 lambda 函数:

df1 = pd.DataFrame({'d':[28000000000,28000000000]})

df1['times'] = df1['d'].apply(lambda x: time.strftime("%H:%M:%S", time.localtime(x)))

list comprehension:

df1['times'] = [time.strftime("%H:%M:%S", time.localtime(x)) for x in df1['d']]

print (df1)
             d     times
0  28000000000  03:46:40
1  28000000000  03:46:40

【讨论】:

  • 是的,以上两种方法都有效。谢谢。有人怀疑,如果需要多列以这种方式进行转换,有可能吗?
  • 是的,有可能,cols = ['d','d1','d2'] 然后df1[cols] = df1[cols].applymap(lambda x: time.strftime("%H:%M:%S", time.localtime(x)))
【解决方案2】:

你可以使用map函数。

import pandas as pd
import time

df = pd.DataFrame([[28000000000, 2.5], [28100000000, 2.54]], columns=['d', 'e'])

df['time'] = df.d.map(lambda t: time.strftime("%H:%M:%S ", time.localtime(t)))
print(df)
#              d     e       time
# 0  28000000000  2.50  03:46:40 
# 1  28100000000  2.54  13:33:20 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    相关资源
    最近更新 更多