Python 2.7 Python数据帧创建
我尝试使用以下代码创建数据帧df:Python 2.7 Python数据帧创建,python-2.7,pandas,numpy,dataframe,Python 2.7,Pandas,Numpy,Dataframe,我尝试使用以下代码创建数据帧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
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
在尝试使用下面的语法创建相同的数据帧时,我得到了一个wierd输出
df = pd.DataFrame([s,t],columns = ["MUL1","MUL2"])
print df
MUL1 MUL2
0 NaN NaN
1 NaN NaN
请解释当两个序列都为非空时,为什么在数据帧中显示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
在幕后,堆叠创建一个2D数组,然后将其转换为数据帧。下面是堆叠阵列的外观-
In [162]: np.c_[s,t]
Out[162]:
array([[ 1, 2],
[ 2, 4],
[ 3, 6],
[ 4, 8],
[ 5, 10],
[ 6, 12]])
如果删除列参数获取:
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
然后定义列-如果列不存在,则获取NAN列:
df = pd.DataFrame([s,t], columns=[0,'MUL2'])
print (df)
0 MUL2
0 1.0 NaN
1 2.0 NaN
最好是使用
字典
:
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
如果需要更改列顺序,请添加列参数:
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
更多信息请参阅
不需要通过-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
A接受参数数据,其类型可以是ndarray、iterable、dict或dataframe。如果您传入一个列表,它将假定每个成员都是一行。例如:
a = [1,2,3]
b = [2,4,6]
df = pd.DataFrame([a, b], columns = ["Col1","Col2", "Col3"])
# output 1:
Col1 Col2 Col3
0 1 2 3
1 2 4 6
您得到的是NaN
,因为它期望index=[0,1]
,但您给出的是[0,1,2,3,4,5]
要获得所需的形状,请首先转置数据:
data = np.array([a, b]).transpose()
如何创建数据帧 输出:
Col1 Col2
0 1 2
1 2 4
2 3 6
我打算在不使用字典的情况下创建数据帧。我添加了另一个解决方案-不需要数据帧构造函数。非常感谢您的帮助help@jezrael谢谢你,你是个救命恩人,这么多有用的答案:)非常感谢你的回答,先生。但我有一个小问题。使用的系列s和t是可以通过打印其中一个来确定的列,例如打印s 0 1 1 2 3 4 5 5 6数据类型:int64。那么,为什么我们必须明确地使用np.c_来将它们转换为列呢?@SarvagyaDubey
s
和t
是pandas系列,很可能它们的索引在创建数据帧时只使用[s,t]
。通过堆叠,它可以获得数组数据,因为我们正在去除这些索引。这有助于我们获得所需的数据帧,与他们以前的索引info.Hmmm无关。我认为如果输入是序列,转换为numpy数组的方法不是很好,因为丢失了索引信息。特别是如果每个系列都有不同的索引,则解决方案失败。您认为呢?您的解决方案只有在默认索引或与pd.DataFrame(np.c_u1;[s,t],columns=[“MUL1”,“MUL2”],index=s.index)相同的情况下才有效。
@jezrael我认为OP希望从s
和t
中获取数据,而不知道它们的索引信息以创建输出数据帧。我会让OP澄清,如果他们需要处理此类案件,以及如何处理此类案件/预期产出。
Col1 Col2
0 1 2
1 2 4
2 3 6