Python 使用生成器表达式将列表系列转换为数据帧
s是一个系列对象:Python 使用生成器表达式将列表系列转换为数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,s是一个系列对象: >>> s 0 [2010, 1] 1 [2011, 5] 2 [2012, 10] dtype: object 然后我遇到了以下内容,它使用生成器表达式将s转换为数据帧 >>> df = pd.DataFrame(i for i in s) >>> df 0 1 0 2010 1 1 2011 5 2 2012 10 有没有解释为什么会这样?我不明白为什么它会起作
>>> s
0 [2010, 1]
1 [2011, 5]
2 [2012, 10]
dtype: object
然后我遇到了以下内容,它使用生成器表达式将s转换为数据帧
>>> df = pd.DataFrame(i for i in s)
>>> df
0 1
0 2010 1
1 2011 5
2 2012 10
有没有解释为什么会这样?我不明白为什么它会起作用。这就是为什么它会起作用。在幕后,
生成器
被转换回列表
。这里有一大块
对于列表
也同样适用
# Creating a list
l = [1,2,3]
# Using the generator
df1 = pd.DataFrame(i for i in l)
# Using the list
df2 = pd.DataFrame(l)
df1.equals(df2)
# True
我认为这是最简单的解决方案:
df = pd.DataFrame({'a': [[2010, 1],[2011, 5],[2012, 10]]})
df[['a1', 'a2']] = df['a'].apply(pd.Series)
阅读文档-
“数据:…或类似对象列表”
。所以你可以使用发电机,但你不能总是这样做。例如,传递zip
或map
对象会导致类型错误。@furas文档声明:“数据:Dict可以包含…或类似列表的对象”
。没有涉及词典,可能没有更新。您可以传递列表、列表列表、元组等。我意识到文档中没有提到可以从列表创建数据帧。
df = pd.DataFrame({'a': [[2010, 1],[2011, 5],[2012, 10]]})
df[['a1', 'a2']] = df['a'].apply(pd.Series)