从Python中缺少值的数据帧创建系列

从Python中缺少值的数据帧创建系列,python,pandas,dataframe,series,Python,Pandas,Dataframe,Series,我想从我拥有的数据框中创建一个熊猫系列 数据框有3列:“日期”、“时间”和“频率”。我希望前两列“日期”和“时间”将成为新系列的索引 不幸的是,我所拥有的数据包含缺少的值。因此,当我尝试转换为系列时,我在指定索引方面遇到了问题。通常,如果没有缺失值,我会使用: index=pd.data_rangestart=df.date[0],end='2015/03/06 17:07:05',freq='S'在pd.Series函数中 但是如果我在我的示例中这样做,那么我会得到一个错误,因为新索引的长度比

我想从我拥有的数据框中创建一个熊猫系列

数据框有3列:“日期”、“时间”和“频率”。我希望前两列“日期”和“时间”将成为新系列的索引

不幸的是,我所拥有的数据包含缺少的值。因此,当我尝试转换为系列时,我在指定索引方面遇到了问题。通常,如果没有缺失值,我会使用:

index=pd.data_rangestart=df.date[0],end='2015/03/06 17:07:05',freq='S'在pd.Series函数中

但是如果我在我的示例中这样做,那么我会得到一个错误,因为新索引的长度比实际索引的长度长——新索引没有缺失值

下面是我的数据帧的一个小示例:

Out[2]: 
          date      time   frequ
0   2015/03/06  17:06:26  50.091
1   2015/03/06  17:06:27  50.087
2   2015/03/06  17:06:29  50.084
3   2015/03/06  17:06:30  50.083
4   2015/03/06  17:06:31  50.082
..         ...       ...     ...
33  2015/03/06  17:07:03  50.079
34  2015/03/06  17:07:04  50.078
35  2015/03/06  17:07:05  50.077
可以看出,2015/03/06 17:06:28的值和时间缺失

这就是ts系列的大致外观:

同样,在这个结果中,前两列是索引

例如,如果我打电话:

In[3]: ts['2015/03/06 17:06:26': '2015/03/06 17:06:29']
我会得到:

out[3]: 
2015/03/06  17:06:26  50.091
2015/03/06  17:06:27  50.087
2015/03/06  17:06:29  50.084

Freq: S, dtype: float64
最后,以下是我编写的代码:

import pandas as pd

data = {'frequ': sum_freq, 'time': sum_time, 'date': date_list}
df = pd.DataFrame(data, columns = ['date', 'time', 'frequ'])
ts = pd.Series(df.frequ.values, index = ???)
有人知道如何克服这个问题吗

谢谢

我使用Python 2.7.6

如果日期列的数据类型为datetime64[ns],时间列的数据类型为timedelta64[ns],则可以将它们添加到一起,形成一个新的数据类型为datetime64[ns]的列。然后可以将该列设置为索引,并选择frequ列以获得所需的系列:

import pandas as pd

df = pd.read_table('data', delim_whitespace=True)
df['date'] = pd.to_datetime(df['date'])
df['time'] = pd.to_timedelta(df['time'])
df['datetime'] = df['date'] + df['time']
ts = df.set_index(['datetime'])['frequ']
屈服

datetime
2015-03-06 17:06:26    50.091
2015-03-06 17:06:27    50.087
2015-03-06 17:06:29    50.084
2015-03-06 17:06:30    50.083
2015-03-06 17:06:31    50.082
2015-03-06 17:07:03    50.079
2015-03-06 17:07:04    50.078
2015-03-06 17:07:05    50.077
Name: frequ, dtype: float64
如果日期列具有dtype datetime64[ns],而时间列具有dtype timedelta64[ns],则可以将它们添加到一起以形成dtype datetime64[ns]的新列。然后可以将该列设置为索引,并选择frequ列以获得所需的系列:

import pandas as pd

df = pd.read_table('data', delim_whitespace=True)
df['date'] = pd.to_datetime(df['date'])
df['time'] = pd.to_timedelta(df['time'])
df['datetime'] = df['date'] + df['time']
ts = df.set_index(['datetime'])['frequ']
屈服

datetime
2015-03-06 17:06:26    50.091
2015-03-06 17:06:27    50.087
2015-03-06 17:06:29    50.084
2015-03-06 17:06:30    50.083
2015-03-06 17:06:31    50.082
2015-03-06 17:07:03    50.079
2015-03-06 17:07:04    50.078
2015-03-06 17:07:05    50.077
Name: frequ, dtype: float64

扩展unutbu的答案,您还需要对索引进行分组,以确保没有重复项。您需要决定如何处理任何此类重复项,例如求和

index = df.groupby('datetime')['frequ'].sum()

扩展unutbu的答案,您还需要对索引进行分组,以确保没有重复项。您需要决定如何处理任何此类重复项,例如求和

index = df.groupby('datetime')['frequ'].sum()

您可以使用将时间序列扩展到1秒频率,用NaN填充缺少的值。这很有效!为了改进它,我想用“nan”来填补空白。因此,例如:“2015-03-06 17:06:26 50.091 2015-03-06 17:06:27 50.087 2015-03-06 17:06:28 nan 2015-03-06 17:06:29 50.084”可以用来将时间序列扩展到1秒频率,用nan填充缺少的值。这很有效!为了改进它,我想用“nan”来填补空白。例如:“2015-03-06 17:06:26 50.091 2015-03-06 17:06:27 50.087 2015-03-06 17:06:28 nan 2015-03-06 17:06:29 50.084”