Pandas Series of lists to one series
我有一系列的熊猫串:
| 1 2 3 | 0                           [slim, waist, man] 1 [slim, waistline] 2 [santa] | 
如您所见,列表的长度不同。我想要一个有效的方法把这个分解成一个系列
| 1 2 3 4 5 6 | 0 slim 1 waist 2 man 3 slim 4 waistline 5 santa | 
我知道我可以用
| 1 | series_name.split(' ') | 
但我很难把这些字符串放回一个列表中。
谢谢!
以下是仅使用熊猫函数的简单方法:
| 1 2 3 4 5 6 | import pandas as pd s = pd.Series([ ['slim', 'waist', 'man'], ['slim', 'waistline'], ['santa']]) | 
。
然后
| 1 | s.apply(pd.Series).stack().reset_index(drop=True) | 
提供所需的输出。在某些情况下,您可能希望保存原始索引并添加第二个级别来索引嵌套元素,例如。
| 1 2 3 4 5 6 | 0  0         slim 1 waist 2 man 1 0 slim 1 waistline 2 0 santa | 
。
如果这是你想要的,只需从链中省略
您基本上只是想在这里展平嵌套列表。
您应该能够迭代系列的元素:
| 1 2 3 | slist =[] for x in series: slist.extend(x) | 
或者一个圆滑(但更难理解)的列表理解:
| 1 | slist = [st for row in s for st in row] | 
。
您可以尝试使用itertools.chain简化列表:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | In [70]: from itertools import chain In [71]: import pandas as pnd In [72]: s = pnd.Series([['slim', 'waist', 'man'], ['slim', 'waistline'], ['santa']]) In [73]: s Out[73]: 0 [slim, waist, man] 1 [slim, waistline] 2 [santa] dtype: object In [74]: new_s = pnd.Series(list(chain(*s.values))) In [75]: new_s Out[75]: 0 slim 1 waist 2 man 3 slim 4 waistline 5 santa dtype: object | 
。
| 1 | series_name.sum() | 
做你所需要的。请确保它是一系列列表,否则您的值将被连接(如果是字符串)或添加(如果是int)
可以使用此函数进行展平和取消展平
| 1 2 3 4 5 6 7 | def flatten(df, col): col_flat = pd.DataFrame([[i, x] for i, y in df[col].apply(list).iteritems() for x in y], columns=['I', col]) col_flat = col_flat.set_index('I') df = df.drop(col, 1) df = df.merge(col_flat, left_index=True, right_index=True) return df | 
。
取消修饰:
| 1 2 | def unflatten(flat_df, col): flat_df.groupby(level=0).agg({**{c:'first' for c in flat_df.columns}, col: list}) | 
号
取消填充后,我们得到相同的数据帧,除了列顺序:
| 1 2 | (df.sort_index(axis=1) == unflatten(flatten(df)).sort_index(axis=1)).all().all() >> True | 
号
您可以使用下面的列表串联操作符-
| 1 2 3 4 5 | lst1 = ['hello','world'] lst2 = ['bye','world'] newlst = lst1 + lst2 print(newlst) >> ['hello','world','bye','world'] | 
或者您可以使用下面的
| 1 2 3 4 5 | lst1 = ['hello','world'] lst2 = ['bye','world'] lst1.extend(lst2) print(lst1) >> ['hello', 'world', 'bye', 'world'] | 
号
使用
| 1 2 | lst1.extend(('Bye','Bye')) >> ['hello', 'world', 'Bye', 'Bye'] |