将新值附加到数据框

Appending new value to the dataframe

print(stocksList.tail(1))
stocksList.loc[len(stocksList.index)] = ["NSEI"]
print(stocksList.tail(1))

以上代码打印相同的值两次,即

         Symbol
1684  ZUARIGLOB

         Symbol
1684  ZUARIGLOB

为什么不在 stocksList 数据框的末尾附加 NSEI?

完整代码:

folPath = "D:\MyDocs\STKS\YT\"

nifty50 = pd.read_csv(folPath + "n50.csv")
stocksList = pd.read_csv(folPath + "stocksList.csv")
stocksList = stocksList[~stocksList['Symbol'].isin(nifty50['Symbol'])]
print(stocksList.tail(1))
stocksList.loc[len(stocksList), 'Symbol'] = "NSEI"
print(stocksList.tail(1))
print(stocksList)

你的代码有什么缺陷

依靠具有重新设计的索引的数据帧上的索引长度是不可靠的。这是一个简单的例子,演示了它是如何失败的。

输入:

df = pd.DataFrame({'Symbol': list('ABCD')},
                  index=np.arange(4))
  Symbol
0      A
1      B
2      C
3      D

预处理:

>>> bad_symbols = ['A', 'B']
>>> df = df[~df['Symbol'].isin(bad_symbols)]
>>> df
  Symbol
2      C
3      D

尝试使用索引长度在末尾追加一行:

>>> df.loc[len(df.index), 'Symbol'] = 'E'
>>> df
  Symbol
2      E
3      D

看到这里发生了什么吗? len(df.index)2,但 2 是一个已经存在的行。

如何解决

使用可靠的方法追加新行。 让我们重新开始:

  Symbol
2      C
3      D
>>> df = df.append(pd.Series({'Symbol': 'E'}, name=max(df.index)+1))
>>> df
  Symbol
2      C
3      D
4      E

或者,或者:

df.loc[max(df.index)+1, 'Symbol'] = 'E'

但要小心 SettingWithCopyWarning