合并多列,每列具有相同数量的行

2024-09-29 17:15:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  1. 输入零件编号列表
  2. 每个零件的价格将从网站上的数据库中返回
  3. 该部分属于五家公司之一,因此生成了5个不同的列表

例如,下面是零件号的初始列表(输入):
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')

Tags: httpscomjsondataframewwwpostrequestspd
2条回答

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

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是DataFrame的列名。Pandas默认使用0..M(M=#of columns)的范围索引,但不提供给DataFrame构造函数

因此,concatenated[0]选择数据帧中的第一列,concatenated[0] == 0检查列中的每个值是否等于0,从而生成一系列TrueFalse值,然后可以使用这些值对数据进行选择性索引

我假设您得到的当前CSV输出遵循0的模式。您可以对输出CSV或要保存为CSV的数据帧应用简单的过滤操作

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

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

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

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

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

相关问题 更多 >

    热门问题