gpt4 book ai didi

python - 如何从字符串/字符 "expand" Pandas 数据帧?

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:39 25 4
gpt4 key购买 nike

我从列表的列表中生成了一个 pandas 数据框:

在:

lis = [['baby ferrets\ntype: mamal\n»age:2\n»food: Renal'],['dog\ntype: mamal\n»age: 3 months\n»food: dog food'], ['cat\ntype: mamal\n»age: 2\n»food: cat food'], ['bobcat (exotic pet)\ntype: mamal\n»age: 1\n»food: meat'], ['iguana\ntype: reptile\n»age: 2\n»food: crickets']]

df = pd.DataFrame(lis)
df

输出:

    0
0 baby ferrets\ntype: mamal\n»age:2\n»food: Renal
1 dog\ntype: mamal\n»age: 3 months\n»food: dog food
2 cat\ntype: mamal\n»age: 2\n»food: cat food
3 bobcat (exotic pet)\ntype: mamal\n»age: 1\n»food: meat
4 iguana\ntype: reptile\n»age: 2\n»food: crickets

如何将之前的数据帧转换为 (*):

    pet, type, age, food
0 baby ferrets, mammal, 2, Renal
1 dog, mammal, 3 months, dog food
2 cat, mammal, 2, cat food
3 bobcat (exotic pet), mammal, 1, meat
4 iguana, reptile, 2, crickets

当我创建一个 pandas 数据框时,我尝试这样做:

df = pd.DataFrame(lis, sep= '\n')

我也尝试过:

df['newcol'] = lis['pet'].str.extract('([A-Z]\w{0,})', expand=True)
df

但是,我并没有匹配所有的元素。是否可以使用 pandas 获取 (*) 格式?

最佳答案

这应该适用于加载后解析您的列。

def parse_col(r):
return pd.Series(data=[i.split(':')[-1] for i in r[0].split('\n')], index=['name', 'type', 'age', 'food'])

df.apply(parse_col, axis=1)

name type age food
0 baby ferrets mamal 2 Renal
1 dog mamal 3 months dog food
2 cat mamal 2 cat food
3 bobcat (exotic pet) mamal 1 meat
4 iguana reptile 2 crickets

解释:

上面的 parse_col 函数接收 DataFrame 的每一行作为 pandas Series ,然后使用该系列的第一个也是唯一一个元素中的字符串 (r[0])。然后字符串被 '\n' 字符分割,因此每个数据字段都是列表的一个单独元素,并再次被 ':' 字符分割标签实际数据。最后,数据被重新组装成另一个 pd.Series并返回。 .apply() DataFrame 方法简单地将上述函数应用于框架的每一行。

也可以修改此函数以在加载到 DataFrame 之前解析列表。

关于python - 如何从字符串/字符 "expand" Pandas 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472000/

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