将列表读入 pandas DataFrame 的列
Posted
技术标签:
【中文标题】将列表读入 pandas DataFrame 的列【英文标题】:Read lists into columns of pandas DataFrame 【发布时间】:2015-05-14 21:29:20 【问题描述】:我想将列表加载到 pandas DataFrame 的列中,但似乎不能简单地做到这一点。这是我想要使用 transpose()
的示例,但我认为这是不必要的:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: x = np.linspace(0,np.pi,10)
In [4]: y = np.sin(x)
In [5]: data = pd.DataFrame(data=[x,y]).transpose()
In [6]: data.columns = ['x', 'sin(x)']
In [7]: data
Out[7]:
x sin(x)
0 0.000000 0.000000e+00
1 0.349066 3.420201e-01
2 0.698132 6.427876e-01
3 1.047198 8.660254e-01
4 1.396263 9.848078e-01
5 1.745329 9.848078e-01
6 2.094395 8.660254e-01
7 2.443461 6.427876e-01
8 2.792527 3.420201e-01
9 3.141593 1.224647e-16
[10 rows x 2 columns]
有没有办法在创建DataFrame时直接将每个列表加载到列中以消除转置并插入列标签?
【问题讨论】:
【参考方案1】:有人建议从数据中创建一个字典,然后像这样将其加载到 DataFrame 中:
In [8]: data = pd.DataFrame('x': x, 'sin(x)': y)
In [9]: data
Out[9]:
x sin(x)
0 0.000000 0.000000e+00
1 0.349066 3.420201e-01
2 0.698132 6.427876e-01
3 1.047198 8.660254e-01
4 1.396263 9.848078e-01
5 1.745329 9.848078e-01
6 2.094395 8.660254e-01
7 2.443461 6.427876e-01
8 2.792527 3.420201e-01
9 3.141593 1.224647e-16
[10 rows x 2 columns]
请注意,字典是一组无序的键值对。如果您关心列顺序,则应传递要使用的有序键值列表(您也可以使用此列表仅包含一些 dict 条目):
data = pd.DataFrame('x': x, 'sin(x)': y, columns=['x', 'sin(x)'])
【讨论】:
您可以通过这种方式指定列顺序: 在 [9] 中: 在 [5] 中: data = pd.DataFrame('x':x, 'sin(x)':y, columns =['x','sin(x)']) 您在字典初始化中缺少引号。 谢谢@DashingAdamHuges,刚刚补充了【参考方案2】:这是另一个保留指定顺序的 1 行解决方案,无需输入两次 x
和 sin(x)
:
data = pd.concat([pd.Series(x,name='x'),pd.Series(y,name='sin(x)')], axis=1)
【讨论】:
以上是关于将列表读入 pandas DataFrame 的列的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以扩展包含列表的 pandas Dataframe 中的列并从列表值本身中获取列名?
如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?