我有一个熊猫系列,其元素作为列表:
import pandas as pd
s = pd.Series([ ['United States of America'],['China', 'Hong Kong'], []])
print(s)
0 [United States of America]
1 [China, Hong Kong]
2 []
如何获得如下系列:
0 United States of America
1 China
1 Hong Kong
我不确定2会发生什么。
答案 0 :(得分:4)
以下选项均返回Series。创建一个新框架并列出。
pd.DataFrame(s.tolist()).stack()
0 0 United States of America
1 0 China
1 Hong Kong
dtype: object
要重置索引,请使用
pd.DataFrame(s.tolist()).stack().reset_index(drop=True)
0 United States of America
1 China
2 Hong Kong
dtype: object
要转换为DataFrame,请调用to_frame()
pd.DataFrame(s.tolist()).stack().reset_index(drop=True).to_frame('countries')
countries
0 United States of America
1 China
2 Hong Kong
如果您想编码高尔夫,请使用
sum(s, [])
# ['United States of America', 'China', 'Hong Kong']
pd.Series(sum(s, []))
0 United States of America
1 China
2 Hong Kong
dtype: object
甚至,
pd.Series(np.sum(s))
0 United States of America
1 China
2 Hong Kong
dtype: object
但是,与大多数其他涉及列表操作总和的操作一样,这在性能方面是不利的(列表串联操作效率很低)。
使用与itertools.chain
的链接可以更快地进行操作:
from itertools import chain
pd.Series(list(chain.from_iterable(s)))
0 United States of America
1 China
2 Hong Kong
dtype: object
pd.DataFrame(list(chain.from_iterable(s)), columns=['countries'])
countries
0 United States of America
1 China
2 Hong Kong
答案 1 :(得分:2)
或使用:
df = pd.DataFrame(s.tolist())
print(df[0].fillna(df[1].dropna().item()))
输出:
0 United States of America
1 China
2 Hong Kong
Name: 0, dtype: object
答案 2 :(得分:2)
假设这是列表
pd.Series(s.sum())
Out[103]:
0 United States of America
1 China
2 Hong Kong
dtype: object