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

标签 python python-3.x pandas dataframe time-series

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

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 对象上的 View 是否不是 Series 类的有效输入?

I have found the to_series function对于 pd.Index 对象,DataFrame 是否有类似的东西?

最佳答案

我想你可以使用 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:

当您将 SeriesDataFrame 列提供给 pd.Series 时,它将使用 index 对其重新编制索引> 你指定。由于您的 DataFrame 列有一个整数 index(不是 date index),您会得到很多缺失值。

关于python - pandas.Series() 使用 DataFrame 列创建返回 NaN 数据条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35818873/

相关文章:

python - 尝试使用 BeautifulSoup4 在 Python 中解析的 PDF 文档中设置第一个标签的属性时出现“NoneType”错误

python - 来自 Pandas Dataframe 的 Fishers 精确测试

python - 使用 urllib.request 和 json 模块在 Python 中加载 JSON 对象

python - 如何从字符串中取出字母并将它们变成整数?

Python 正则表达式 - 根据周围模式选择值

python - BeautifulSoup 获取列表的 href - 需要简化脚本 - 替换多处理

python - 我可以用掩码分割 numpy 数组吗?

python - 修改 pandas 数据框中的行子集

python - 处理Python中日期解析的异常和错误

python-2.7 - 在 Pandas DataFrame 中查找非 NaN 值的索引