Python 将多列合并为具有相同行数的一列

Python 将多列合并为具有相同行数的一列,python,pandas,Python,Pandas,我正在用零件号从网站上刮取价格。 逻辑是: 输入零件号列表 将从网站上的数据库中返回每个零件的价格 该零件属于五家公司之一,因此生成了五个不同的列表 例如,下面是零件号的初始列表(输入): b123 nadsf 功率 韦奥 他们各自属于一家公司: Part # Company A B C D b123 1.5 nadsf 3.4 ower

我正在用零件号从网站上刮取价格。 逻辑是:

  • 输入零件号列表
  • 将从网站上的数据库中返回每个零件的价格
  • 该零件属于五家公司之一,因此生成了五个不同的列表
  • 例如,下面是零件号的初始列表(输入):
    b123
    nadsf
    功率
    韦奥

    他们各自属于一家公司:

    Part #     Company A        B          C          D
    b123          1.5
    nadsf                      3.4
    ower                                             47
    weoa                                  33
    
    当前csv格式的输出为:

        0
    0   1.5   
    1   0     
    2   0
    3   0
    0   0     
    1   3.4   
    2   0
    3   0
    0   0     
    1   0     
    2   33
    3   0
    0   0     
    1   0     
    2   0
    3   47
    0   0     
    1   0     
    2   0
    3   0
    
    
    我只想要一张清单,而不是5张;所需输出为:

    0    1.5
    
    1    3.4
    
    2    33
    
    3    47
    
    不知道我怎么能做到这一点

    感谢您的帮助/建议

    请参阅下面的代码:

    import pandas as pd
    
    
    df = pd.read_excel(r'C:\Users\212677036\Documents\Copy of MIC Parts Review.xlsx')
    PN = pd.DataFrame(df, columns=['Product code'])
    
    i = 0
    
    Total_rows = PN.shape[0]
    partnumlist = []
    partnumlist1 = []
    partnumlist2 = []
    partnumlist3 = []
    partnumlist4 = []
    partnumlist5 = []
    
    while i < Total_rows:
    
             data = {"partOptionFilter": {"PartNumber": PN.iloc[i, 0], "AlternativeOemId": "17155"}}
             r = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions', json=data).json()
    
             partnumlist.append(r['Data']['PartOptions'][0]['YourPrice'])
    
             data1 = {"partOptionFilter": {"PartNumber": PN.iloc[i, 0], "AlternativeOemId": "17475"}}
             r1 = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions', json=data1).json()
    
             partnumlist1.append(r1['Data']['PartOptions'][0]['YourPrice'])
    
             data2 = {"partOptionFilter": {"PartNumber": PN.iloc[i, 0], "AlternativeOemId": "16880"}}
             r2 = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions', json=data2).json()
    
             partnumlist2.append(r2['Data']['PartOptions'][0]['YourPrice'])
    
             data3 = {"partOptionFilter": {"PartNumber": PN.iloc[i, 0], "AlternativeOemId": "47221"}}
             r3 = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions', json=data3).json()
    
             partnumlist3.append(r3['Data']['PartOptions'][0]['YourPrice'])
    
             data4 = {"partOptionFilter": {"PartNumber": PN.iloc[i, 0], "AlternativeOemId": "17045"}}
             r4 = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions', json=data4).json()
    
             partnumlist4.append(r4['Data']['PartOptions'][0]['YourPrice'])
    
             data5 = {"partOptionFilter": {"PartNumber": PN.iloc[i, 0], "AlternativeOemId": "17055"}}
             r5 = requests.post('https://www.partsfinder.com/Catalog/Service/GetPartOptions', json=data5).json()
    
             partnumlist5.append(r5['Data']['PartOptions'][0]['YourPrice'])
    
             i=i+1
    
    list_of_dataframes = [pd.DataFrame(partnumlist),pd.DataFrame(partnumlist1),
                   pd.DataFrame(partnumlist2), pd.DataFrame(partnumlist3),
                   pd.DataFrame(partnumlist4), pd.DataFrame(partnumlist5)]
    
    pd.concat(list_of_dataframes).to_csv(r'C:\Users\212677036\Documents\output25.csv')
    
    将熊猫作为pd导入
    df=pd.read\u excel(r'C:\Users\212677036\Documents\Copy of MIC Parts Review.xlsx')
    PN=pd.DataFrame(df,列=['产品代码']))
    i=0
    总行数=零件形状[0]
    partnumlist=[]
    partnumlist1=[]
    partnumlist2=[]
    partnumlist3=[]
    partnumlist4=[]
    partnumlist5=[]
    而i
    我假设您当前获得的CSV输出遵循0的模式。您可以对输出CSV或保存为CSV的数据帧应用简单的筛选操作

    例如,您的输出CSV被转换为数据帧df

    df=pd.concat(数据帧列表)#假设这是您的输出csv数据帧

    我没有看到df的列名。您可以选择0向第二列添加列名。一旦你有了它

    df=df[~(df['col']==0])]


    这将删除第二列中0的所有行(因为~),并提供所需的结果

    您可以使用布尔索引删除所有零值并重置索引,使其从0计数到N-1。您必须保存结果 在将变量保存到cvs之前,将pd.concat的。你可以这样做:

    concatenated = pd.concat(list_of_dataframes)
    clean = concatenated[concatenated[0] != 0].reset_index(drop=True)
    clean.to_csv(r'C:\Users\212677036\Documents\output25.csv')
    
    这将为您提供所需的输出:

    0    1.5
    1    3.4
    2    33
    3    47
    
    为了提供更多信息,输出csv文件第一行中的
    0
    是数据帧的列名。Pandas默认使用范围索引
    0..M
    (M=#of columns),但不提供给DataFrame构造函数


    因此,
    concatenated[0]
    选择数据帧中的第一列,并且
    concatenated[0]==0
    检查列中的每个值是否等于
    0
    ,从而产生一系列
    值,然后可以使用它有选择地为数据编制索引。

    您可以使用列
    ['Part'、'Company'、'value']创建一个数据框。