Python 分隔/拆分行值并形成单独的行
数据的可复制代码:Python 分隔/拆分行值并形成单独的行,python,delimiter,reshape,Python,Delimiter,Reshape,数据的可复制代码: import pandas as pd dict = {"a": "[1,2,3,4]", "b": "[1,2,3,4]"} dict = pd.DataFrame(list(dict.items())) dict 0 1 0 a [1,2,3,4] 1 b [1,2,3,4] 我想拆分/分隔“第1列”,并为每个拆分值创建单独的行 预期产出: 0 1 0 a 1 1 a 2 2 a 3
import pandas as pd
dict = {"a": "[1,2,3,4]", "b": "[1,2,3,4]"}
dict = pd.DataFrame(list(dict.items()))
dict
0 1
0 a [1,2,3,4]
1 b [1,2,3,4]
我想拆分/分隔“第1列”,并为每个拆分值创建单独的行
预期产出:
0 1
0 a 1
1 a 2
2 a 3
3 a 4
4 b 1
5 b 2
6 b 3
7 b 4
我应该先删除括号,然后拆分值吗?我真的不知道该怎么做。请提供任何有助于我解决此问题的参考资料?基于以下逻辑:
由于单元格中有包含列表(而非列表)的字符串,因此可以使用
eval
:
dict_v = {"a": "[1,2,3,4]", "b": "[1,2,3,4]"}
df = pd.DataFrame(list(dict_v.items()))
df = (df.rename(columns={0:'l'}).set_index('l')[1]
.apply(lambda x: pd.Series(eval(x))).stack()
.reset_index().drop('level_1',1).rename(columns={'l':0,0:1}))
或者另一种方法是创建数据帧
(可能更快),例如:
您的输出是
0 1
0 a 1
1 a 2
2 a 3
3 a 4
4 b 1
5 b 2
6 b 3
7 b 4
所有的重命名都是为了准确地获得您的输入/输出可能的重复,可能的重复感谢Kopytok,这个解决方案也起了作用。我觉得另一个更容易理解和解释。再次感谢您提供的解决方案:)
df = (pd.DataFrame(df[1].apply(eval).tolist(),index=df[0])
.stack().reset_index(level=1, drop=True)
.reset_index(name='1'))
0 1
0 a 1
1 a 2
2 a 3
3 a 4
4 b 1
5 b 2
6 b 3
7 b 4