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