[英]Opening, editing and saving a csv file
我有一個名為pairList的csv,如下所示:
0 BBG.XNGS.AAPL.S BBG.XNGS.BRCM.S 0
1 BBG.XNGS.AAPL.S BBG.XNGS.MSFT.S 0
2 BBG.XNGS.AAPL.S BBG.XNGS.AMAT.S 0
3 BBG.XNGS.AAPL.S BBG.XNGS.QCOM.S 0
4 BBG.XNGS.AMGN.S BBG.XNYS.MWW.S 0
5 BBG.XNGS.BRCM.S BBG.XNGS.MSFT.S 0
6 BBG.XNGS.BRCM.S BBG.XNGS.AMAT.S 0
7 BBG.XNGS.BRCM.S BBG.XNGS.QCOM.S 0
8 BBG.XNGS.MSFT.S BBG.XNGS.AMAT.S 0
9 BBG.XNGS.MSFT.S BBG.XNGS.QCOM.S 0
10 BBG.XNGS.AMAT.S BBG.XNGS.QCOM.S 0
11 BBG.XNGS.CMCSA.S BBG.XNGS.CSCO.S 0
12 BBG.XNGS.CMCSA.S BBG.XNGS.SYMC.S 0
13 BBG.XNGS.CSCO.S BBG.XNGS.SYMC.S 0
我正在嘗試打開csv,向下看每一行,直到找到第一行,其中4列等於0(在這種情況下,它是第一行,但它將改變)。 將這一行的數據復制到3個變量
stock1ID
stock2ID
status
然后更新狀態(滲漏行的第4列中的值),然后將數據幀保存回csv。 因此,csv(在此示例中)最終看起來像:
0 BBG.XNGS.AAPL.S BBG.XNGS.BRCM.S 1
1 BBG.XNGS.AAPL.S BBG.XNGS.MSFT.S 0
2 BBG.XNGS.AAPL.S BBG.XNGS.AMAT.S 0
3 BBG.XNGS.AAPL.S BBG.XNGS.QCOM.S 0
4 BBG.XNGS.AMGN.S BBG.XNYS.MWW.S 0
5 BBG.XNGS.BRCM.S BBG.XNGS.MSFT.S 0
6 BBG.XNGS.BRCM.S BBG.XNGS.AMAT.S 0
7 BBG.XNGS.BRCM.S BBG.XNGS.QCOM.S 0
8 BBG.XNGS.MSFT.S BBG.XNGS.AMAT.S 0
9 BBG.XNGS.MSFT.S BBG.XNGS.QCOM.S 0
10 BBG.XNGS.AMAT.S BBG.XNGS.QCOM.S 0
11 BBG.XNGS.CMCSA.S BBG.XNGS.CSCO.S 0
12 BBG.XNGS.CMCSA.S BBG.XNGS.SYMC.S 0
13 BBG.XNGS.CSCO.S BBG.XNGS.SYMC.S 0
我可以打開csv並選擇將其分配給3個變量的數據。 我無法保存更新的csv。 我最終得到的csv看起來像:
0 BBG.XNGS.AAPL.S BBG.XNGS.BRCM.S 0 1
1 BBG.XNGS.AAPL.S BBG.XNGS.MSFT.S 0 1
2 BBG.XNGS.AAPL.S BBG.XNGS.AMAT.S 0 1
3 BBG.XNGS.AAPL.S BBG.XNGS.QCOM.S 0 1
4 BBG.XNGS.AMGN.S BBG.XNYS.MWW.S 0 1
5 BBG.XNGS.BRCM.S BBG.XNGS.MSFT.S 0 1
6 BBG.XNGS.BRCM.S BBG.XNGS.AMAT.S 0 1
7 BBG.XNGS.BRCM.S BBG.XNGS.QCOM.S 0 1
8 BBG.XNGS.MSFT.S BBG.XNGS.AMAT.S 0 1
9 BBG.XNGS.MSFT.S BBG.XNGS.QCOM.S 0 1
10 BBG.XNGS.AMAT.S BBG.XNGS.QCOM.S 0 1
11 BBG.XNGS.CMCSA.S BBG.XNGS.CSCO.S 0 1
12 BBG.XNGS.CMCSA.S BBG.XNGS.SYMC.S 0 1
13 BBG.XNGS.CSCO.S BBG.XNGS.SYMC.S 0 1
當我想要的只是已選擇的行應僅在第三列中為1時,csv的第4列為1。
請參閱下面有關我到目前為止編寫的代碼:
def getPairID(TimeseriesDataPath):
#status = 0 - pair not processed
#status = 1 - pair being processed
#status = 2 - pair finined being processed
pattern = 'PairsToTestList'+'.csv'
pairToTest = 0
with open(TimeseriesDataPath+pattern,'rt') as f:
pairList = pd.read_csv(f,engine='c',header=None,index_col=0, parse_dates=True, infer_datetime_format=True)
for i, row in pairList.iterrows():
if i != 'unique_id':
stock1ID = row[1]
stock2ID = row[2]
status = row[3]
if status == 0 :
print('stock1ID ',stock1ID,'stock2ID ',stock2ID,'status ',status)
pairToTest = 1
pairList[row[2]] = 1
path = os.path.join(TimeseriesDataPath,pattern)
pairList.to_csv(path,header=False)
break
return stock1ID,stock2ID,pairToTest
已更新,包括我認為您正在尋找的迭代。
我還使用.iloc
更新了它,以查找下一行的整數位置,而不是使用索引。
f = 'C:/Users/yourname/Desktop/test.csv'
df = pd.read_csv(f, header = None)
i = 0
while i <= df.index.max():
subset = df.loc[df[2] == 0].head(1)
if subset[0].count() == 0:
stock1ID, stock2ID, status = None, None, None
else:
stock1ID, stock2ID, status = subset[0].iloc[0], subset[1].iloc[0], subset[2].iloc[0]
print '{}, {}, {}'.format(stock1ID, stock2ID, status)
df.loc[df.index == subset.index[0], 2] = 1
i += 1
df.to_csv('C:/Users/Pete/Desktop/test2.csv', header = None)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.