首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Pandas数据框创建

问Python Pandas数据框创建
EN

Stack Overflow用户
提问于 2017-10-04 18:21:21
回答 3查看 14K关注 0票数 11

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

代码语言:javascript
复制
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

当尝试使用下面的语法创建相同的数据帧时,我得到了一个奇怪的输出。

代码语言:javascript
复制
df = pd.DataFrame([s,t],columns = ["MUL1","MUL2"])

print df

   MUL1  MUL2
0   NaN   NaN
1   NaN   NaN

请解释为什么在两个系列都非空的情况下NaN显示在数据框中,以及为什么只显示两行,而不显示其余行。

另外,通过使用pandas DataFrame方法中的columns参数,还提供了创建数据框的正确方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-04 18:25:33

正确的方法之一是将包含这些序列的输入列表中的数组数据堆叠到列中。

代码语言:javascript
复制
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数组,然后将其转换为数据帧。下面是堆叠数组的样子-

代码语言:javascript
复制
In [162]: np.c_[s,t]
Out[162]: 
array([[ 1,  2],
       [ 2,  4],
       [ 3,  6],
       [ 4,  8],
       [ 5, 10],
       [ 6, 12]])
票数 6
EN

Stack Overflow用户

发布于 2017-10-04 18:26:34

如果删除列参数get:

代码语言:javascript
复制
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列:

代码语言:javascript
复制
df = pd.DataFrame([s,t], columns=[0,'MUL2'])

print (df)
     0  MUL2
0  1.0   NaN
1  2.0   NaN

最好使用dictionary

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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构造函数的另一个解决方案不是必需的:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2021-05-06 18:29:48

pandas.DataFrame接受参数data,该参数可以是ndarray、iterable、dict或dataframe类型。

如果你传入一个列表,它将假设每个成员都是一行。示例:

代码语言:javascript
复制
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]

要获得所需的形状,请首先转置数据:

代码语言:javascript
复制
data = np.array([a, b]).transpose()

如何创建pandas数据帧

代码语言:javascript
复制
import pandas as pd

a = [1,2,3]
b = [2,4,6]

df = pd.DataFrame(dict(Col1=a, Col2=b))  

输出:

代码语言:javascript
复制
   Col1  Col2
0     1     2
1     2     4
2     3     6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46562479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档