"合并Pandas DataFram后的DateTime格式更改"

2024-06-17 21:59:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个dataframe,其中有一个名为time的列,包含时间的datetime表示,还有一个变量列。我想合并这两个数据帧,但由于某些原因,这会弄乱nn的日期时间格式。在

我用这段代码创建了单独的数据帧:

## ECG load
nn = pd.read_csv('D:\\path\\Nn.csv',delimiter=";",decimal=',',header=None,names=["time","ibi"])
fsEcg = 1024 # Sample frequency
tsEcg = mkdatMovis('2016-10-31T12:16:15.015') #datetime rep of Start time string
nn.loc[:,'time'] = nn.time/fsEcg # convert sample number to seconds
ecgTime = zip(tsEcg + datetime.timedelta(seconds=float(cmt)) for cmt in nn.time)
nn.loc[:,'time'] = ecgTime

## EDA load
eda = pd.read_csv('D:\\path\\eda.csv',\
                  delimiter=";",decimal=',',header=None,names=["eda"])
fsEda = 32
tsEda = mkdatMovis('2016-10-31T12:17:08.363')
cumEda = np.arange(len(eda),dtype=np.float64)/fsEda  # create time array in seconds
cumEda = pd.Series(cumEda)
edadat = pd.DataFrame()
edadat.loc[:,'time'] = zip(tsEda + datetime.timedelta(seconds=float(cmt)) for cmt in cumEda)
edadat.loc[:,'eda'] = eda

数据帧如下:

^{pr2}$

将数据帧与df = edadat.merge(nn,on="time",how="outer")合并后,数据如下所示:

                                time  eda           nn
0      (2016-10-31 12:17:08.363000,)  2.0          NaN
1      (2016-10-31 12:17:08.363000,)  5.0          NaN
2      (2016-10-31 12:17:08.363000,)  5.0          NaN
3      (2016-10-31 12:17:08.363000,)  4.0          NaN
4      (2016-10-31 12:17:08.363000,)  4.0          NaN
...
43027            1477917574356797000  NaN   928.710938
43028            1477917575276719000  NaN   919.921875
43029            1477917576178086000  NaN   901.367188
43030            1477917577064805000  NaN   886.718750
43031            1477917577910508000  NaN   845.703125

为什么datetime表单nn在合并后转换为unix?我不是用了完全相同的代码来创建时间序列吗?在


Tags: csv数据indatetimetime时间nnnan
1条回答
网友
1楼 · 发布于 2024-06-17 21:59:41

我想您在time列中的tuples有问题,所以您需要通过str[0]删除元组-选择DataFrame行中每个元组的第一个元素:

edadat.time = edadat.time.str[0]
print (edadat)
                             time   eda
0      2016-10-31 12:17:08.363000   2.0
1      2016-10-31 12:17:08.363000   5.0
2      2016-10-31 12:17:08.363000   5.0
3      2016-10-31 12:17:08.363000   4.0
4      2016-10-31 12:17:08.363000   4.0
41582  2016-10-31 12:38:47.363000  36.0

然后使用:

^{pr2}$

但我认为更好的方法是使用^{}

df1 = pd.merge_ordered(edadat, nn,on="time",how="outer")
print (df1)
                         time   eda           nn
0  2016-10-31 12:16:26.409531   NaN   972.656250
1  2016-10-31 12:16:27.394883   NaN   985.351562
2  2016-10-31 12:16:28.379258   NaN   984.375000
3  2016-10-31 12:16:29.360703   NaN   981.445312
4  2016-10-31 12:16:30.407578   NaN  1046.875000
5  2016-10-31 12:17:08.363000   2.0          NaN
6  2016-10-31 12:17:08.363000   5.0          NaN
7  2016-10-31 12:17:08.363000   5.0          NaN
8  2016-10-31 12:17:08.363000   4.0          NaN
9  2016-10-31 12:17:08.363000   4.0          NaN
10 2016-10-31 12:38:47.363000  36.0          NaN
11 2016-10-31 12:39:37.910508   NaN   845.703125

相关问题 更多 >