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']创建一个数据框。