从列表创建数据框

时间:2018-02-22 14:36:57

标签: python list pandas dataframe

我想从以下列表中创建一个数据框:

list1 = [1, 1, 1, 0, 4, 3, 10, 6, 16, 18, 39, 284, 3857, 3924, 334, 43, 14, 4, 3, 3]
list2 = ['-150< n <-138', '-137< n <-127', '-126< n <-115', '-114< n <-104', '-103< n <-92', '-91< n <-81', '-80< n <-69', '-68< n <-58', '-57< n <-46', '-45< n <-35', '-34< n <-23', '-22< n <-12', '-11< n <0', '0< n <11', '12< n <22', '23< n <34', '35< n <45', '46< n <57', '58< n <68', '69< n <80']

我尝试了这个,但它不起作用

my_dict = {}
for i in range(len(temp)):
    my_dict[temp2[i]] = temp[i]

df1 = pd.DataFrame(data=my_dict)

ValueError:如果使用所有标量值,则必须传递索引

我想理解为什么这个错误,我想创建一个数据框,其中列是字符串,值是数字。

提前谢谢

3 个答案:

答案 0 :(得分:3)

似乎需要:

df = pd.DataFrame([list1], columns=list2)
print (df)
   -150< n <-138  -137< n <-127  -126< n <-115  -114< n <-104  -103< n <-92  \
0              1              1              1              0             4   

   -91< n <-81  -80< n <-69  -68< n <-58  -57< n <-46  -45< n <-35  \
0            3           10            6           16           18   

   -34< n <-23  -22< n <-12  -11< n <0  0< n <11  12< n <22  23< n <34  \
0           39          284       3857      3924        334         43   

   35< n <45  46< n <57  58< n <68  69< n <80  
0         14          4          3          3  

但是如果需要带值的索引使用Series/DataFrame contructor:

s = pd.Series(list1, index=list2)
print (s)
-150< n <-138       1
-137< n <-127       1
-126< n <-115       1
-114< n <-104       0
-103< n <-92        4
-91< n <-81         3
-80< n <-69        10
-68< n <-58         6
-57< n <-46        16
-45< n <-35        18
-34< n <-23        39
-22< n <-12       284
-11< n <0        3857
0< n <11         3924
12< n <22         334
23< n <34          43
35< n <45          14
46< n <57           4
58< n <68           3
69< n <80           3
dtype: int64
df = pd.DataFrame(list1, index=list2, columns=['a'])
print (df)
                  a
-150< n <-138     1
-137< n <-127     1
-126< n <-115     1
-114< n <-104     0
-103< n <-92      4
-91< n <-81       3
-80< n <-69      10
-68< n <-58       6
-57< n <-46      16
-45< n <-35      18
-34< n <-23      39
-22< n <-12     284
-11< n <0      3857
0< n <11       3924
12< n <22       334
23< n <34        43
35< n <45        14
46< n <57         4
58< n <68         3
69< n <80         3

答案 1 :(得分:3)

你试过这个:

A - IPv4 address

答案 2 :(得分:0)

由于您在自己的解决方案中使用dict,请尝试Series

之类的内容
pd.Series(dict(zip(list2,list1))).to_frame().reset_index()
Out[1502]: 
            index     0
0    -103< n <-92     4
1   -114< n <-104     0
2       -11< n <0  3857
3   -126< n <-115     1
4   -137< n <-127     1
5   -150< n <-138     1
6     -22< n <-12   284
7     -34< n <-23    39
8     -45< n <-35    18
9     -57< n <-46    16
10    -68< n <-58     6
11    -80< n <-69    10
12    -91< n <-81     3
13       0< n <11  3924
14      12< n <22   334
15      23< n <34    43
16      35< n <45    14
17      46< n <57     4
18      58< n <68     3
19      69< n <80     3