我尝试使用以下代码创建数据帧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当尝试使用下面的语法创建相同的数据帧时,我得到了一个奇怪的输出。
df = pd.DataFrame([s,t],columns = ["MUL1","MUL2"])
print df
MUL1 MUL2
0 NaN NaN
1 NaN NaN请解释为什么在两个系列都非空的情况下NaN显示在数据框中,以及为什么只显示两行,而不显示其余行。
另外,通过使用pandas DataFrame方法中的columns参数,还提供了创建数据框的正确方法。
发布于 2017-10-04 18:25:33
正确的方法之一是将包含这些序列的输入列表中的数组数据堆叠到列中。
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]])发布于 2017-10-04 18:26:34
如果删除列参数get:
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然后定义列-如果列不存在,则获取NaNs列:
df = pd.DataFrame([s,t], columns=[0,'MUL2'])
print (df)
0 MUL2
0 1.0 NaN
1 2.0 NaN最好使用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如果需要更改列顺序,则添加列参数:
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 documentation。
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发布于 2021-05-06 18:29:48
pandas.DataFrame接受参数data,该参数可以是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()如何创建pandas数据帧
import pandas as pd
a = [1,2,3]
b = [2,4,6]
df = pd.DataFrame(dict(Col1=a, Col2=b)) 输出:
Col1 Col2
0 1 2
1 2 4
2 3 6https://stackoverflow.com/questions/46562479
复制相似问题