我需要处理大量的CSV文件,其中时间戳始终是表示unix时间戳的字符串,以毫秒为单位。我找不到一种方法来有效地修改这些列。
这就是我提出的,但是这当然只复制了列,我必须以某种方式将它放回原始数据集。我确定在创建DataFrame时可以完成吗?
import sys if sys.version_info[0] < 3: from StringIO import StringIO else: from io import StringIO import pandas as pd data = 'RUN,UNIXTIME,VALUE\n1,1447160702320,10\n2,1447160702364,20\n3,1447160722364,42' df = pd.read_csv(StringIO(data)) convert = lambda x: datetime.datetime.fromtimestamp(x / 1e3) converted_df = df['UNIXTIME'].apply(convert)
这将选择“UNIXTIME”列并从中进行更改
0 1447160702320 1 1447160702364 2 1447160722364 Name: UNIXTIME,dtype: int64
进入这个
0 2015-11-10 14:05:02.320 1 2015-11-10 14:05:02.364 2 2015-11-10 14:05:22.364 Name: UNIXTIME,dtype: datetime64[ns]
但是,我想使用像pd.apply()这样的东西来获取转换后的列返回的整个数据集,或者正如我已经写过的那样,只需在从CSV生成DataFrame时创建日期时间。
您可以使用
to_datetime
作为后处理步骤并传递arg unit =’ms’:
In [5]: df['UNIXTIME'] = pd.to_datetime(df['UNIXTIME'],unit='ms') df Out[5]: RUN UNIXTIME VALUE 0 1 2015-11-10 13:05:02.320 10 1 2 2015-11-10 13:05:02.364 20 2 3 2015-11-10 13:05:22.364 42