Python 打开、编辑和保存csv文件

Python 打开、编辑和保存csv文件,python,pandas,Python,Pandas,我有一个名为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.

我有一个名为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
    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
我试图打开csv,向下看每一行,直到找到第一行,其中4列等于0(在这种情况下,这是第一行,但它会改变)。将此行的数据复制到3个变量

stock1ID
stock2ID 
status
然后更新状态(seelcted行第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    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
    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
csv有一个额外的第4列1,而我只希望已选择的行的第3列中应有一个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)
f='C:/Users/yourname/Desktop/test.csv'
df=pd.read\u csv(f,header=None)
i=0

当我尝试时:
pairList.to_csv(os.path.join(TimeseriesDataPath,pattern),header=False)
谢谢bernie,使用,hea‌​der=False我得到一个语法错误:标识符中的字符无效…有什么想法吗?感谢pshep123,我试图实现您的解决方案,但我得到了一个索引错误:索引越界异常,stock1ID,stock2ID,status=subset[0][0],subset[1][0],subset[2][0]如果是这样,最右边的列中没有一个值是
0
。我将更新代码以进行测试。谢谢,每次迭代都会在csv(0,1,2,3,4,…)的前面添加一个索引列,因此它只适用于子集为df.loc[df[2]==0]的一次迭代。head(1)更新了我认为您需要的内容。我可以把它放在一个函数中并返回变量,但这会扼杀循环。Stacey,如果这至少有帮助的话,请投赞成票。如果不是答案,那是可以理解的。