熊猫:从系列创建DataFrame

BMi*_*ell 32 python pandas mat

我当前的代码如下所示 - 我正在导入一个MAT文件,并尝试从其中的变量创建一个DataFrame:

mat = loadmat(file_path)  # load mat-file
Variables = mat.keys()    # identify variable names

df = pd.DataFrame         # Initialise DataFrame

for name in Variables:

    B = mat[name]
    s = pd.Series (B[:,1])
Run Code Online (Sandbox Code Playgroud)

所以在循环中我可以创建一系列的每个变量(它们是带有两列的数组 - 所以我需要的值在第2列)

我的问题是如何将系列追加到数据帧?我查看了文档,但没有一个例子符合我的要求.

最好的祝福,

Jaa*_*aan 42

以下是如何创建一个DataFrame,其中每个系列都是一行.

对于单个Series(产生单行DataFrame):

series = pd.Series([1,2], index=['a','b'])
df = pd.DataFrame([series])
Run Code Online (Sandbox Code Playgroud)

对于具有相同索引的多个系列:

cols = ['a','b']
list_of_series = [pd.Series([1,2],index=cols), pd.Series([3,4],index=cols)]
df = pd.DataFrame(list_of_series, columns=cols)
Run Code Online (Sandbox Code Playgroud)

对于具有可能不同索引的多个系列:

list_of_series = [pd.Series([1,2],index=['a','b']), pd.Series([3,4],index=['a','c'])]
df = pd.concat(list_of_series, axis=1).transpose()
Run Code Online (Sandbox Code Playgroud)

要创建每个系列都是列的DataFrame ,请参阅其他人的答案.或者,可以创建一个DataFrame,其中每个系列都是一行,如上所述,然后使用df.transpose().但是,如果列具有不同的数据类型,则后一种方法效率低下.


Tom*_*ger 23

无需初始化一个空的DataFrame(你甚至没有这样做,你需要pd.DataFrame()使用parens).

相反,要创建一个DataFrame,其中每个系列都是一列,

  1. 列出系列series,和
  2. 将它们水平地连接起来 df = pd.concat(series, axis=1)

就像是:

series = [pd.Series(mat[name][:, 1]) for name in Variables]
df = pd.concat(series, axis=1)
Run Code Online (Sandbox Code Playgroud)

  • 对不起,回答了我自己的问题...... df.columns =变量 (3认同)

Wto*_*wer 13

现在有一个pandas.Series.to_frame方法:

Series.to_frame(name=NoDefault.no_default)

将系列转换为数据帧。

参数

nameobject,可选:传递的名称应替换系列名称(如果有)。

退货

DataFrame:系列的数据帧表示。

例子

s = pd.Series(["a", "b", "c"], name="vals")
s.to_frame()
Run Code Online (Sandbox Code Playgroud)