2015-05-10 48 views
2

我有一個熊貓數據框,日期信息存儲爲一個字符串。我想直接從每個日期提取一個月,所以我嘗試這樣做:爲什麼在嘗試將列添加到Pandas數據框時獲取np.NaN值?

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 

的D型爲NaN的是浮動的,我不知道爲什麼。爲什麼這不只是用子字符串創建另一列?

+0

當我運行你的代碼時,我只是得到一個'KeyError',因爲你沒有一個名爲'a'的列。你的意思是'df''date']'還有其他什麼? – abarnert

+0

另外,在這裏你不知道Python/NumPy/Pandas切片語法的問題,或者只是你犯了一個錯字,並使用了','你的意思是':'?我假設它是後者,你不需要任何解釋。 – abarnert

+0

我用'date'替換了'a',因爲它應該是。你是對的 - 我用逗號而不是冒號將分片搞亂了 –

回答

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: string indices must be integers

我想你想:

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 

所以,因爲這是一個無效的操作大熊貓將返回NaN

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 
相關問題