将新值附加到数据框
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'
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'