将pandas列中的列表列表转换为字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将pandas列中的列表列表转换为字符串相关的知识,希望对你有一定的参考价值。
如何将包含列表列表的pandas df列转换为字符串。 df中列“类别”的片段
[['Electronics', 'Computers & Accessories', 'Cables & Accessories', 'Cables & Interconnects', 'USB Cables'], ['Video Games', 'Sony PSP']]
[['Video Games', 'PlayStation 3', 'Accessories', 'Controllers', 'Gamepads']]
[['Cell Phones & Accessories', 'Accessories', 'Chargers', 'Travel Chargers'], ['Video Games', 'Nintendo DS']]
我尝试了以下代码:
df.loc[:,"categories"]=[item for sublist in df.loc[:,"categories"] for item in sublist]
但它给了我一个错误。有没有其他方法这样做?
ValueError:值的长度与索引的长度不匹配
预期专栏:
'Electronics', 'Computers & Accessories', 'Cables & Accessories', 'Cables & Interconnects', 'USB Cables','Video Games', 'Sony PSP'
'Video Games', 'PlayStation 3', 'Accessories', 'Controllers', 'Gamepads'
'Cell Phones & Accessories', 'Accessories', 'Chargers', 'Travel Chargers','Video Games', 'Nintendo DS'
答案
使用嵌套生成器与join
:
df["categories"]=[', '.join(item for sublist in x for item in sublist) for x in df["categories"]]
如果在较大的DataFrame
中表现很重要:
from itertools import chain
df["categories"] = [', '.join(chain.from_iterable(x)) for x in df["categories"]]
print (df)
categories
0 Electronics, Computers & Accessories, Cables &...
1 Video Games, PlayStation 3, Accessories, Contr...
2 Cell Phones & Accessories, Accessories, Charge...
时间:(在实际数据中应该是不同的,最好先测试一下):
df = pd.concat([df] * 10000, ignore_index=True)
In [45]: %timeit df["c1"]=[', '.join(item for sublist in x for item in sublist) for x in df["categories"]]
39 ms ± 706 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [46]: %timeit df["c2"]=[', '.join(chain.from_iterable(x)) for x in df["categories"]]
22.1 ms ± 258 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [47]: %timeit df['c3'] = df["categories"].apply(lambda x: ', '.join(str(r) for v in x for r in v))
66.7 ms ± 695 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
另一答案
你需要列表理解
df['col'] = df.col.apply(lambda x: ', '.join(str(r) for v in x for r in v))
输出:
col
0 Electronics, Computers & Accessories, Cables &...
1 Video Games, PlayStation 3, Accessories, Contr...
2 Cell Phones & Accessories, Accessories, Charge...
以上是关于将pandas列中的列表列表转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
将包含字符串和 NAN 的列转换为 Pandas 中的整数列表
Python/Pandas/Datetime:将列中的整个列表转换为日期时间
根据每个句子的第一个单词将 pandas 数据框列中的字符串列表分解为新列
获取 Pandas DataFrame 列中字符串列表中的所有行 - 此模式具有匹配组
Python/Pandas:如何将字符串列表与 DataFrame 列匹配
Pandas使用split函数基于指定分隔符拆分数据列的内容为列表设置expand参数将拆分结果列表内容转化为多列数据并添加到原数据中replace函数基于正则表达式替换字符串数据列中的匹配内容