簡體   English   中英

在 Pandas DataFrame 中創建 NaN 列

[英]Create NaN column in pandas DataFrame

我看到以下示例來說明如何在 DataFrame 中創建 NaN 列。

import pandas as pd
import numpy as np
import math
import copy
import datetime as dt

"""
Accepts a list of symbols along with start and end date
Returns the Event Matrix which is a pandas Datamatrix
Event matrix has the following structure :
    |IBM |GOOG|XOM |MSFT| GS | JP |
(d1)|nan |nan | 1  |nan |nan | 1  |
(d2)|nan | 1  |nan |nan |nan |nan |
(d3)| 1  |nan | 1  |nan | 1  |nan |
(d4)|nan |  1 |nan | 1  |nan |nan |
...................................
...................................
Also, d1 = start date
nan = no information about any event.
1 = status bit(positively confirms the event occurence)
"""

def find_events(ls_symbols, d_data):
    ''' Finding the event dataframe '''
    df_close = d_data['actual_close']
    ts_market = df_close['SPY']

    print "Finding Events"

    # Creating an empty dataframe
    df_events = copy.deepcopy(df_close) # type <class 'pandas.core.frame.DataFrame'>
    df_events = df_events * np.NAN # << why it works here

我嘗試按如下方式復制該方法:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
frame = frame * np.NAN # TypeError: can't multiply sequence by non-int of type 'float'

Q> 為什么它現在在這里不起作用?

因為您有包含字符串的列state ,並且將字符串與NaN相乘會產生錯誤。 如果您真的想將狀態設置為NaN ,請使用frame['state'] = np.NAN

注意df_close實際上是一個column ,而不是一個數據df_close df_close = d_data['actual_close'] 。因此df_events也是df_events )。 您有一個包含三列的數據框,其中state是一個字符串,pandas 將其存儲為 Python 對象。 並且您不能將字符串/對象乘以一個數字。

無論如何,乘法是完全沒有必要的:

  • 所有df_close = df_close * np.NaN所做的是以一種不必要的混淆方式將 NaN 分配給整個 column
  • 直接分配= np.NaN會清晰= np.NaN 或者到pd.np.NaN
  • 如果要將 NaN 分配給多列,請執行: df[['year','pop']] = pd.np.nan
  • 沒有真正的乘法發生。 只是不要寫那樣的代碼。 不要濫用運營商...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM