gpt4 book ai didi

python - Pandas - 将 CSV 读入数据框,其中一列具有不同数量的子列

转载 作者:行者123 更新时间:2023-11-28 20:15:47 25 4
gpt4 key购买 nike

在 Pandas 中,是否可以有一个包含不同数量子列的列的数据框?

例如,假设我有这个 CSV 文件:

transactionId, userName, date, itemList, totalCost

其中 itemList 包含可变数量的 itemId;itemPrice 对,这些对由竖线 (|) 分隔。列表中 itemId;itemPrice 对的数量没有上限。

itemId ; itemPrice | itemId ; itemPrice

下面是一些行的例子:

transactionId, userName, date,       itemList,              totalCost
123, Bob , 7/29/2017, ABC;10|XYZ;20, 30
234, Alice, 7/31/2017, CDE;20|QRS;15|KLM;10, 45

第一行有两对itemId;itemPrice,而第二行有三对。

如何创建一个数据框来包含这些信息?我需要数据框内的数据框吗?

还有其他关于可变列数的 Stackoverflow 帖子,但是 they assume a maximum number of columns .

最佳答案

我会尝试规范化您的数据 as proposed by @DYZ in comments :

In [145]: df = df.join(df.pop('itemList')
...: .str.extractall(r'(?P<item>\w+);(?P<price>\d+)')
...: .reset_index(level=1, drop=True))
...:

In [146]: df
Out[146]:
transactionId userName date totalCost item price
0 123 Bob 7/29/2017 30 ABC 10
0 123 Bob 7/29/2017 30 XYZ 20
1 234 Alice 7/31/2017 45 CDE 20
1 234 Alice 7/31/2017 45 QRS 15
1 234 Alice 7/31/2017 45 KLM 10

标准化数据允许我们应用 Pandas/Numpy/SciPy/等。 ufunctions 直接作用于包含标量值的列。

演示:检查totalCost

df.price = pd.to_numeric(df.price, errors='coerce')

In [151]: df.assign(tot2=df.groupby(level=0).price.transform('sum'))
Out[151]:
transactionId userName date totalCost item price tot2
0 123 Bob 7/29/2017 30 ABC 10 30
0 123 Bob 7/29/2017 30 XYZ 20 30
1 234 Alice 7/31/2017 45 CDE 20 45
1 234 Alice 7/31/2017 45 QRS 15 45
1 234 Alice 7/31/2017 45 KLM 10 45

In [152]: df.assign(tot2=df.groupby(level=0).price.transform('sum')).query("totalCost != tot2")
Out[152]:
Empty DataFrame
Columns: [transactionId, userName, date, totalCost, item, price, tot2]
Index: []

PS last empty DF 显示我们没有任何条目 totalCost != sum(price)

关于python - Pandas - 将 CSV 读入数据框,其中一列具有不同数量的子列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45425597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com