Python Pandas数据框架创建

Sar*_*bey 8 numpy dataframe python-2.7 pandas

我尝试使用以下代码创建数据框df:

import numpy as np
import pandas as pd
index = [0,1,2,3,4,5]
s = pd.Series([1,2,3,4,5,6],index= index)
t = pd.Series([2,4,6,8,10,12],index= index)
df = pd.DataFrame(s,columns = ["MUL1"])
df["MUL2"] =t

print df


   MUL1  MUL2
0     1     2
1     2     4
2     3     6
3     4     8
4     5    10
5     6    12
Run Code Online (Sandbox Code Playgroud)

在尝试使用以下语法创建相同的数据框架时,我得到了一个奇怪的输出.

df = pd.DataFrame([s,t],columns = ["MUL1","MUL2"])

print df

   MUL1  MUL2
0   NaN   NaN
1   NaN   NaN
Run Code Online (Sandbox Code Playgroud)

请解释为什么当系列非空时为什么NaN显示在数据框中,为什么只显示两行而没有显示其余的.

还提供了使用pandas DataFrame方法中的columns参数创建数据框的正确方法,如上所述.

Div*_*kar 6

正确的方法之一是将数组数据从保存这些系列的输入列表堆叠到列中 -

In [161]: pd.DataFrame(np.c_[s,t],columns = ["MUL1","MUL2"])
Out[161]: 
   MUL1  MUL2
0     1     2
1     2     4
2     3     6
3     4     8
4     5    10
5     6    12
Run Code Online (Sandbox Code Playgroud)

在幕后,堆叠会创建一个2D数组,然后将其转换为数据帧.这是堆叠阵列的样子 -

In [162]: np.c_[s,t]
Out[162]: 
array([[ 1,  2],
       [ 2,  4],
       [ 3,  6],
       [ 4,  8],
       [ 5, 10],
       [ 6, 12]])
Run Code Online (Sandbox Code Playgroud)


jez*_*ael 5

如果删除列参数得到:

df = pd.DataFrame([s,t])

print (df)
   0  1  2  3   4   5
0  1  2  3  4   5   6
1  2  4  6  8  10  12
Run Code Online (Sandbox Code Playgroud)

然后定义列 - 如果列不存在则获取 NaNs 列:

df = pd.DataFrame([s,t], columns=[0,'MUL2'])

print (df)
     0  MUL2
0  1.0   NaN
1  2.0   NaN
Run Code Online (Sandbox Code Playgroud)

更好的是使用dictionary

df = pd.DataFrame({'MUL1':s,'MUL2':t})

print (df)
   MUL1  MUL2
0     1     2
1     2     4
2     3     6
3     4     8
4     5    10
5     6    12
Run Code Online (Sandbox Code Playgroud)

如果需要更改列顺序,请添加列参数:

df = pd.DataFrame({'MUL1':s,'MUL2':t}, columns=['MUL2','MUL1'])

print (df)
   MUL2  MUL1
0     2     1
1     4     2
2     6     3
3     8     4
4    10     5
5    12     6
Run Code Online (Sandbox Code Playgroud)

更多信息请参见数据框文档

concat构造函数的另一个解决方案DataFrame是不必要的:

df = pd.concat([s,t], axis=1, keys=['MUL1','MUL2'])

print (df)
   MUL1  MUL2
0     1     2
1     2     4
2     3     6
3     4     8
4     5    10
5     6    12
Run Code Online (Sandbox Code Playgroud)