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参数创建数据框的正确方法,如上所述.
正确的方法之一是将数组数据从保存这些系列的输入列表堆叠到列中 -
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)
如果删除列参数得到:
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)
| 归档时间: |
|
| 查看次数: |
5382 次 |
| 最近记录: |