【问题标题】:Appending new value to the dataframe将新值附加到数据框
【发布时间】:2021-10-08 14:39:24
【问题描述】:
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)

【问题讨论】:

  • 尝试指定列名:stocksList.loc[len(stocksList),'Symbol'] = "NSEI"
  • @AnuragDabas 谢谢,但我现在试过了,它不起作用。
  • @Stupid_Intern,你在打印print(stocksList.tail(1))吗?
  • @KarnKumar 是的,那应该给我最后一个元素吧

标签: python pandas dataframe append


【解决方案1】:

你的代码有什么缺陷

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

输入:

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

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 2021-06-06
    • 2018-04-06
    • 2017-06-13
    • 2018-07-15
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多