首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将多列合并为一个具有相同行数的列

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

Stack Overflow用户
提问于 2019-10-02 17:47:25
回答 2查看 53关注 0票数 0

我正在从一个使用零件号码的网站上削价。逻辑是:

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

例如,下面是部件编号(输入)的初始列表:

b123

nadsf

电源

维奥阿

它们各属于一家公司:

代码语言:javascript
代码运行次数:0
运行
复制
Part #     Company A        B          C          D
b123          1.5
nadsf                      3.4
ower                                             47
weoa                                  33

csv目前的输出是:

代码语言:javascript
代码运行次数:0
运行
复制
    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个;所需的输出是:

代码语言:javascript
代码运行次数:0
运行
复制
0    1.5

1    3.4

2    33

3    47

不知道我怎么能做到,

如有任何帮助/建议,请见谅!

有关我的代码,请参阅下面:

代码语言:javascript
代码运行次数:0
运行
复制
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')
EN

回答 2

Stack Overflow用户

发布于 2019-10-02 20:17:51

我假设当前的CSV输出在它中遵循了0的模式。您可以对输出CSV或作为CSV保存的数据帧应用简单的筛选操作。

例如,您的输出CSV被转换为Dataframe。

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

我没有看到df的列名。您可能可以在第二列中添加一个列名,其中包含您所选择的0。一旦你有了这个,

df =df[~(df‘’col‘== 0]

这将删除第二列中带有0的所有行(因为有~),并给出所需的结果。

票数 0
EN

Stack Overflow用户

发布于 2019-10-03 07:28:48

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

代码语言:javascript
代码运行次数:0
运行
复制
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')

这将为您提供所需的输出:

代码语言:javascript
代码运行次数:0
运行
复制
0    1.5
1    3.4
2    33
3    47

为了提供更多的洞察力,输出csv文件第一行中的0是DataFrame的列名。在不向0..M构造函数提供范围索引时,熊猫默认使用DataFrame的范围索引(M =# of列)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58206721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档