如何在同一列中写入两个不同变量值的excel/pandas Dataframe

Posted

技术标签:

【中文标题】如何在同一列中写入两个不同变量值的excel/pandas Dataframe【英文标题】:How to write in excel/pandas Dataframe of two different variables value in same column 【发布时间】:2021-01-28 19:48:25 【问题描述】:

我是 pandas 的新手,想弄清楚如何在同一列中添加两个不同的变量值。

import pandas as pd
import requests
from bs4 import BeautifulSoup
itemproducts = pd.DataFrame()

url = 'https://www.trwaftermarket.com/en/catalogue/product/BCH720/'
r = requests.get(url)
soup = BeautifulSoup(r.content,'lxml')

code_name = soup.find_all('div','class':'col-sm-6 intro-section reset-margin')
for head in code_name:
    item_code  = head.find('span','class':'heading').text
    item_name  = head.find('span','class':'subheading').text

for tab_ in tab_4:
    ab = tab_.find_all('td')
    make_name1    = ab[0].text.replace('Make','')
    code1         = ab[1].text.replace('OE Number','')
    make_name2    = ab[2].text.replace('Make','')
    code2         = ab[3].text.replace('OE Number','')

itemproducts=itemproducts.append('CODE':item_code,
                                'NAME':item_name,
                                'MAKE':[make_name1,make_name2],
                                'OE NUMBER':[code1,code2],ignore_index=True)

输出(Excel 图像)

我到底想要什么

【问题讨论】:

【参考方案1】:

在 pandas 中,您必须以相同的长度指定所有数据。因此,在这种情况下,我建议您将每一列或每一行指定为一个固定长度的列表。对于那些少一个成员的,附加一个NaN 来匹配。

【讨论】:

【参考方案2】:

我在*** 上发现了一个类似的问题,可以帮助您。另一种方法是使用 Pandas Dataframe 中的explode function

下面我举了一个来自 pandas 文档的例子。

>>> df = pd.DataFrame('A': [[1, 2, 3], 'foo', [], [3, 4]], 'B': 1)
>>> df
           A  B
0  [1, 2, 3]  1
1        foo  1
2         []  1
3     [3, 4]  1

>>> df.explode('A')
     A  B
0    1  1
0    2  1
0    3  1
1  foo  1
2  NaN  1
3    3  1
3    4  1

【讨论】:

【参考方案3】:

我无法从您的脚本中重现结果。但是,根据您的最终数据框,您可以在最后使用explodeapply 数据框:

#creating your dataframe
itemproducts = pd.DataFrame('CODE':'BCH720','MAKE':[['HONDA','HONDA']],'NAME':['Brake Caliper'],'OE NUMBER':[['43019-SAA-J51','43019-SAA-J50']])

>>> itemproducts
      CODE                MAKE           NAME                           OE NUMBER
0  BCH720  ['HONDA', 'HONDA']  Brake Caliper  ['43019-SAA-J51', '43019-SAA-J50']

#using apply method with explode on 'MAKE' and 'OE NUMBER'
>>> itemproducts.apply(lambda x: x.explode() if x.name in ['MAKE', 'OE NUMBER'] else x)
     CODE   MAKE           NAME      OE NUMBER
0  BCH720  HONDA  Brake Caliper  43019-SAA-J51
0  BCH720  HONDA  Brake Caliper  43019-SAA-J50

【讨论】:

添加了答案。请让我知道这对你有没有用。如果确实如此,请考虑接受/勾选答案。

以上是关于如何在同一列中写入两个不同变量值的excel/pandas Dataframe的主要内容,如果未能解决你的问题,请参考以下文章

在C程序之间共享变量值[重复]

如何在分配的变量值更改时停止变量更改C#

js如何实现将一个通过计算出来的变量值,不刷新页面就可以将变量值显示在同一页面的文本框中?

如何将用户定义的变量值限制为jmeter中的特定线程组

Axure中怎么实现变量值在页面中的传递

如何在 Razor .cshtml 和 Html 文件之间共享 JS 变量值(同一解决方案中的 Html 解决方案)