使用双循环创建DataFrame

时间:2018-09-23 12:22:00

标签: python python-3.x pandas

我明白了:

columns = ['a','b','c']
data = [1,2,3],[3,4],[4,5,5]
df = pandas.DataFrame({i:pandas.Series(j) for i in columns for j in data})
print(df)

输出:

   a  b  c
0  4  4  4
1  5  5  5
2  5  5  5

我需要:

   a  b  c
0  1  3  4
1  2  4  5
2  3     5

我真的不明白为什么这不起作用。我知道我正在以正确的方式访问data中的元素。

有什么提示吗?

2 个答案:

答案 0 :(得分:2)

这应该做到:

import pandas as pd

data = [[1, 2, 3], [3, 4], [4, 5, 5]]
df = pd.DataFrame(data).transpose()
df.columns = columns

输出:

    a    b    c
0  1.0  3.0  4.0
1  2.0  4.0  5.0
2  3.0  NaN  5.0

答案 1 :(得分:1)

进入第二个循环时,您正在覆盖值。 您正在做的是:

import pandas


columns = ['a','b','c']
data = [1,2,3],[3,4],[4,5,5]

myDict = {}
for i in columns:
    for j in data:
        myDict[i]=j
print(pandas.DataFrame(myDict))

这就是为什么您的数据被覆盖的原因。 您想做的显然是:

myDict = {}
for i,key in enumerate(columns):
    myDict[key] = data[i]

但是,这将导致:

raise ValueError('arrays must all be same length')
ValueError: arrays must all be same length

哪种解决方案描述得here