为什么在尝试将列添加到Pandas数据帧时会获得np.NaN值?

时间:2015-05-10 20:45:36

标签: python pandas

我有一个pandas数据帧,日期信息存储为字符串。我想直接从每个日期中提取月份,所以我尝试了这个:

import pandas as pd

df = pd.DataFrame([['2015-04-16', 5], ['2014-05-01', 6]],columns = ['date','units'])
df['month'] = df['month'].str[5,7]
print(df)

这给出了以下输出

    date  units  month
0  2015-04-16      5    NaN
1  2014-05-01      6    NaN

NaN的dtype是浮动的,我不知道为什么。为什么这不会创建带有子串的另一列?

2 个答案:

答案 0 :(得分:3)

如果您尝试将每个字符串切片以从5到7获取子字符串,则需要:,而不是,

>>> df = pd.DataFrame([['2015-04-16', 5], ['2014-05-01', 6]],columns = ['date','units'])
>>> df['month'] = df['date'].str[5:7]
>>> print(df)
         date  units month
0  2015-04-16      5    04
1  2014-05-01      6    05

答案 1 :(得分:1)

我认为您的问题是您的切片无效:

In [7]:

df = pd.DataFrame([['2015-04-16', 5], ['2014-05-01', 6]],columns = ['date','units'])
df['date'].str[5,7]
​
Out[7]:
0   NaN
1   NaN
Name: date, dtype: float64

与此比较:

t='2015-04-16'
t[5,7]

这提出了一个:

  

TypeError:字符串索引必须是整数

我想你想要:

In [18]:

df = pd.DataFrame([['2015-04-16', 5], ['2014-05-01', 6]],columns = ['date','units'])
df['month'] = df['date'].str[5:7]
df
Out[18]:
         date  units month
0  2015-04-16      5    04
1  2014-05-01      6    05

因为这是一个无效的操作,pandas正在返回NaN