【问题标题】:NaN values when new column is added to pandas DataFrame based on an existing column data基于现有列数据将新列添加到 pandas DataFrame 时的 NaN 值
【发布时间】:2023-01-04 22:24:40
【问题描述】:

我正在尝试在基于另一个现有列的 pandas DataFrame 中创建一个新列。我正在从列 Name 中提取字符 10:19 并将其添加为新列 expiry 。但是expiry中的大部分数据都显示为nan。我是 python 和 Pandas 的新手。我该如何解决这个问题?

allowedSegment = [14]
index_symbol = "BANKNIFTY"

fno_url = 'http://public.fyers.in/sym_details/NSE_FO.csv'
fno_symbolList = pd.read_csv(fno_url, header=None)
fno_symbolList.columns = ['FyersToken', 'Name', 'Instrument', 'lot', 'tick', 'ISIN', 'TradingSession', 'Lastupdatedate',
                           'Expirydate', 'Symbol', 'Exchange', 'Segment', 'ScripCode', 'ScripName', 'Ignore_1',
                          'StrikePrice', 'CE_PE', 'Ignore_2']

fno_symbolList = fno_symbolList[fno_symbolList['Instrument'].isin(allowedSegment) & (fno_symbolList['ScripName'] == index_symbol)]

fno_symbolList['expiry'] = fno_symbolList['Name'][10:19]

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    在处理列中的字符串并对其进行操作时,请尝试以下操作:

    fno_symbolList['expiry'] = fno_symbolList['Name'].str[10:19]
    

    .str 允许您对列执行字符串操作。

    【讨论】:

      【解决方案2】:

      名称列中的某些行可能少于 10 个字符。在这种情况下,切片操作 x[10:19] 将返回一个空字符串,该字符串将在创建到期列时转换为 NaN。

      fno_symbolList['expiry'] = fno_symbolList['Name'].apply(lambda x: x[10:19] if pd.notnull(x) and len(x) >= 19 else '')
      

      【讨论】:

        猜你喜欢
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 2020-02-01
        • 1970-01-01
        • 2018-08-13
        • 1970-01-01
        相关资源
        最近更新 更多