pandas.Series() 使用 DataFrame 列创建返回 NaN 数据条目

新手上路,请多包涵

我正在尝试使用代码将数据帧转换为系列,简化后的代码如下所示:

 dates = ['2016-1-{}'.format(i)for i in range(1,21)]
values = [i for i in range(20)]
data = {'Date': dates, 'Value': values}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
ts = pd.Series(df['Value'], index=df['Date'])
print(ts)

但是,打印输出看起来像这样:

 Date
2016-01-01   NaN
2016-01-02   NaN
2016-01-03   NaN
2016-01-04   NaN
2016-01-05   NaN
2016-01-06   NaN
2016-01-07   NaN
2016-01-08   NaN
2016-01-09   NaN
2016-01-10   NaN
2016-01-11   NaN
2016-01-12   NaN
2016-01-13   NaN
2016-01-14   NaN
2016-01-15   NaN
2016-01-16   NaN
2016-01-17   NaN
2016-01-18   NaN
2016-01-19   NaN
2016-01-20   NaN
Name: Value, dtype: float64

NaN 来自哪里? DataFrame 对象上的视图是否不是 Series 类的有效输入?

我找到了 to_series 函数 pd.Index 对象,是否有类似的东西 DataFrame s ?

原文由 deepbrook 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 517
2 个回答

我认为您可以使用 values ,它将列 Value 转换为数组:

 ts = pd.Series(df['Value'].values, index=df['Date'])

 import pandas as pd
import numpy as np
import io

dates = ['2016-1-{}'.format(i)for i in range(1,21)]
values = [i for i in range(20)]
data = {'Date': dates, 'Value': values}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
print df['Value'].values
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

ts = pd.Series(df['Value'].values, index=df['Date'])

 print(ts)
Date
2016-01-01     0
2016-01-02     1
2016-01-03     2
2016-01-04     3
2016-01-05     4
2016-01-06     5
2016-01-07     6
2016-01-08     7
2016-01-09     8
2016-01-10     9
2016-01-11    10
2016-01-12    11
2016-01-13    12
2016-01-14    13
2016-01-15    14
2016-01-16    15
2016-01-17    16
2016-01-18    17
2016-01-19    18
2016-01-20    19
dtype: int64

或者您可以使用:

 ts1 = pd.Series(data=values, index=pd.to_datetime(dates))
print(ts1)
2016-01-01     0
2016-01-02     1
2016-01-03     2
2016-01-04     3
2016-01-05     4
2016-01-06     5
2016-01-07     6
2016-01-08     7
2016-01-09     8
2016-01-10     9
2016-01-11    10
2016-01-12    11
2016-01-13    12
2016-01-14    13
2016-01-15    14
2016-01-16    15
2016-01-17    16
2016-01-18    17
2016-01-19    18
2016-01-20    19
dtype: int64

谢谢 @ajcr 更好地解释为什么你得到 NaN

When you give a Series or DataFrame column to pd.Series , it will reindex it using the index you specify.因为你的 DataFrame 列有一个整数 index (不是 date index )你会得到很多缺失值。

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以这样做:

 s = df.set_index('Date')

现在是一列数据框。

如果你真的想要它作为一个系列:

 s = df.set_index('Date').Value

顺便说一句,NaN 是 numpy 的非数字。

使用您的方法,您可以使用:

 ts = pd.Series(df['Value'].values, name='Value', index=df['Date'])

您得到 NaN 的原因是您没有以正确的格式提供数据。您正在将一个系列传递给一个系列。

原文由 Alexander 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题