我有一个项目列表,想要用某些条件清理数据,输出是一个数据框。以下是列表:
[
"Onion per Pack|500 g|Rp18,100|Rp3,700 / 100 g|Add to cart",
"Shallot per Pack|250 g|-|49%|Rp22,300|Rp11,300|Rp4,600 / 100 g|Add to cart",
"Spring Onion per Pack|250 g|Rp7,000|Rp2,800 / 100 g|Add to cart",
"Green Beans per Pack|250 g|Rp5,900|Rp2,400 / 100 g|Add to cart",
]
到
<表类>名称 单位 折扣价格单价 tbody><<tr>每包洋葱 500 g td> Rp18,100 Rp3,700/100 g 葱每包 250克49%Rp22,300 Rp11,300 葱每包 250 g td> Rp7,000 Rp2,800/100 g 绿豆每包 250 g td> Rp5,900 Rp2,400/100 g 表类>
一旦源数据被清理(最好是由提供者)并且每个字段都被定义-通过数据集确保相同数量的字段-可以使用以下非常简单的方法来填充DataFrame:
数据:
cols = ['name', 'unit', 'discount', 'price', 'unit_price', 'other']
# Fields are defined by placing a 'double delimiter' indicating empty fields.
items = ["Onion per Pack|500 g||Rp18,100|Rp3,700 / 100 g|Add to cart",
"Shallot per Pack|250 g|49%|Rp22,300|Rp4,600 / 100 g|Add to cart",
"Spring Onion per Pack|250 g||Rp7,000|Rp2,800 / 100 g|Add to cart",
"Green Beans per Pack|250 g||Rp5,900|Rp2,400 / 100 g|Add to cart"]
人口:
清理后的源数据可以通过data
参数直接填充到DataFrame中。在下面的例子中,使用"生成器表达式"来有效地迭代数据集并按字段分隔符进行分割。
下一条语句删除了额外的列,该列不包含在输出中。
df = pd.DataFrame(data=(i.split('|') for i in items), columns=cols)
df.drop('other', axis=1, inplace=True)
输出:
name unit discount price unit_price
0 Onion per Pack 500 g Rp18,100 Rp3,700 / 100 g
1 Shallot per Pack 250 g 49% Rp22,300 Rp4,600 / 100 g
2 Spring Onion per Pack 250 g Rp7,000 Rp2,800 / 100 g
3 Green Beans per Pack 250 g Rp5,900 Rp2,400 / 100 g
我会使用地图;试一试:
ids = {
5: [0, 2, -1, 3, 4],
8: [0, 2, 4, 6, 7]
}
datas = pd.DataFrame()
for i in item:
i = i.split("|")
long = len(i)
data = {
"name": i[ids[long][0]],
"unit": i[ids[long][1]],
"discount": i[ids[long][2]] if ids[long][2] != -1 else "",
"price": i[ids[long][3]],
"unit price": i[ids[long][4]],
}
datas.append(pd.DataFrame(data))