拆分(分解)pandas 数据框字符串条目以分隔行 [英] Split (explode) pandas dataframe string entry to separate rows
问题描述
我有一个 pandas 数据框
,其中一列文本字符串包含逗号分隔值.我想拆分每个 CSV 字段并为每个条目创建一个新行(假设 CSV 是干净的并且只需要在,"上拆分).例如,a
应该变成 b
:
I have a pandas dataframe
in which one column of text strings contains comma-separated values. I want to split each CSV field and create a new row per entry (assume that CSV are clean and need only be split on ','). For example, a
should become b
:
In [7]: a
Out[7]:
var1 var2
0 a,b,c 1
1 d,e,f 2
In [8]: b
Out[8]:
var1 var2
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 2
到目前为止,我尝试了各种简单的函数,但是.apply
方法在一个轴上使用时似乎只接受一行作为返回值,而我无法得到.transform
工作.任何建议将不胜感激!
So far, I have tried various simple functions, but the .apply
method seems to only accept one row as return value when it is used on an axis, and I can't get .transform
to work. Any suggestions would be much appreciated!
示例数据:
from pandas import DataFrame
import numpy as np
a = DataFrame([{'var1': 'a,b,c', 'var2': 1},
{'var1': 'd,e,f', 'var2': 2}])
b = DataFrame([{'var1': 'a', 'var2': 1},
{'var1': 'b', 'var2': 1},
{'var1': 'c', 'var2': 1},
{'var1': 'd', 'var2': 2},
{'var1': 'e', 'var2': 2},
{'var1': 'f', 'var2': 2}])
我知道这行不通,因为我们通过 numpy 丢失了 DataFrame 元数据,但它应该让您了解我尝试做的事情:
I know this won't work because we lose DataFrame meta-data by going through numpy, but it should give you a sense of what I tried to do:
def fun(row):
letters = row['var1']
letters = letters.split(',')
out = np.array([row] * len(letters))
out['var1'] = letters
a['idx'] = range(a.shape[0])
z = a.groupby('idx')
z.transform(fun)
推荐答案
这样的事情怎么样:
In [55]: pd.concat([Series(row['var2'], row['var1'].split(','))
for _, row in a.iterrows()]).reset_index()
Out[55]:
index 0
0 a 1
1 b 1
2 c 1
3 d 2
4 e 2
5 f 2
然后你只需要重命名列
这篇关于拆分(分解)pandas 数据框字符串条目以分隔行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!